这种复发的时间复杂性

时间:2018-02-18 18:05:56

标签: algorithm time

主方法上T(n)= T(n / 2)+ 2 ^ n是否可能?

如何衡量此重现的时间复杂度。谢谢

2 个答案:

答案 0 :(得分:0)

好吧,做一些扩展:

T(n) = 2^n + T(n/2)
     = 2^n + 2^(n/2) + T(n/4)
     = 2^n + 2^(n/2) + 2^(n/4) + T(n/8)

...等

显然,复杂度至少为Ω(2 ^ n),因为扩展中存在 2 ^ n

此外,每次扩展中添加的术语变得非常快。你可能已经知道了:

2^n + 2^(n-1) + 2^(n-2)...  = O(2^n)

你有:

2^n + 2^(n/2) + 2^(n/4)...

除了第一个之外,这些术语都是较小的,直到 n <2 (围绕基本情况),所以你的序列在 O( 2 ^ n),也就是说,下限是紧的,复发是在Θ(2 ^ n)

答案 1 :(得分:-2)

我们需要知道基本情况才能解决这种递归关系。首先,概括关系:

T(n) = T(n/2) + 2^n  
= [T(n/4)+2^(n/2)] + 2^n  
= [T(n/8)+2^(n/4)] + 2^(n/2) + 2^n
...

然后使用基本情况进行简化。

以下是https://users.cs.duke.edu/~ola/ap/recurrence.html的示例:

  

解决复发关系

     

您实际上可以解决上面给出的递归关系。我们将在这里草拟如何做到这一点。

     

我们会在下面的第一行写n而不是O(n),因为它会产生   代数要简单得多。

     

T(n)= 2T(n / 2)+ n

    =  2 [2 T(n/4) + n/2] + n

    =  4 T(n/4) + 2n

     = 4 [2 T(n/8) + n/4] + 2n

     = 8 T(n/8) + 3n

     = (ask your class to fill in this line, or you fill it in)

      you should have written: 16 T(n/16) + 4n 

     = 2k T(n/2k) + k n     [this is the Eureka! line]
     

您可以要求学生填写最后一行的部分内容。注意   最后一行是通过看到一个模式得出的 - 这就是   尤里卡/信仰/实践的飞跃,推广数学模式   部分问题。

     

我们知道T(1)= 1,这是结束上述推导的一种方法。   特别是我们希望T(1)出现在=的右侧   标志。这意味着我们想要:

   n/2k = 1    OR   n = 2k  OR   log2 n = k
     

继续前面的推导,我们得到以下因为k =   log2 n:

     = 2k T(n/2k) + k n

     = 2log2 n T(1) + (log2n) n

     = n + n log2 n    [remember that T(1) = 1]

     = O(n log n)
相关问题