![](/img/trans.png)
[英]Is this Big-O Notation Correct for this Simple Sort Function (Python)?
[英]Big-O notation for two simple recursive functions
我在Python中有兩個遞歸函數,只是想知道它們的Big O表示法。 每個人的大O是什么?
def cost(n):
if n == 0:
return 1
else:
return cost(n-1) + cost(n-1)
def cost(n):
if n == 0:
return 1
else:
return 2*cost(n-1)
讓我們使用遞歸關系來解決這個問題! 第一個函數的運行時可以遞歸地描述為
T(0)= 1
T(n + 1)= 2T(n)+ 1
也就是說,基本情況需要一個時間單位才能完成,否則我們會對較小的問題實例進行兩次遞歸調用,並進行一些設置和清理工作。 我們得到的是,在這種復發中擴展一些術語
這個系列1,3,7,15 ......可能看起來很熟悉,因為它是2 1 - 1,2 2 - 1,2 3 - 1等。更一般地說,我們可以證明
T(n)= 2 n + 1 - 1
我們可以通過歸納來做到這一點 作為我們的基本情況,T(0)= 1 = 2 1 - 1,因此聲明適用於n = 0.現在假設對於某些n,T(n)= 2 n + 1 - 1.然后我們得到
T(n + 1)= 2T(n)+ 1 = 2(2 n + 1 - 1)+ 1 = 2 n + 2 - 2 + 1 = 2 n + 2 - 1
我們完成了! 由於這種重復發生在2 n + 1 - 1 = 2(2 n ) - 1,我們得到運行時間是Θ(2 n )。
第二個函數的運行時可以遞歸地描述為
T(0)= 1
T(n + 1)= T(n)+ 1
擴展一些條款:
這給出了1,2,3,4 ......,所以我們可能會猜測更多
T(n)= n + 1
我們可以再次證明這一點。 作為基本情況,如果n = 0,則T(0)= 1 = 0 + 1.對於歸納步驟,假設對於某些n,T(n)= n + 1。
T(n + 1)= T(n)+ 1 = n + 1 + 1 = n + 2
我們完成了! 由於運行時為n + 1,因此運行時為Θ(n)。
希望這可以幫助!
使用遞歸樹查找成本(通過可視化圖表)。
函數代價的遞歸關系(n)
T(n) = 2T(n-1)+c
If at kth level input size become 0 (base condition where func terminates)
n-k =0
k=n
Total cost of the function (adding cost of each level) :
T(n) = 2^0*c+ 2^1*c + 2^2*c + 2^3*c +.. .. . .+ 2^n * c
= O(2^n)
類似的方式我們可以找到第二個函數的時間復雜度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.