簡體   English   中英

兩個簡單遞歸函數的Big-O表示法

[英]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

也就是說,基本情況需要一個時間單位才能完成,否則我們會對較小的問題實例進行兩次遞歸調用,並進行一些設置和清理工作。 我們得到的是,在這種復發中擴展一些術語

  • T(0)= 1
  • T(1)= 2T(0)+ 1 = 2 + 1 = 3
  • T(2)= 2T(1)+ 1 = 2×3 + 1 = 7
  • T(3)= 2T(2)+ 1 = 2×7 + 1 = 15

這個系列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

擴展一些條款:

  • T(0)= 1
  • T(1)= T(0)+ 1 = 1 + 1 = 2
  • T(2)= T(1)+ 1 = 2 + 1 = 3
  • T(3)= T(2)+ 1 = 3 + 1 = 4

這給出了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM