主方法上T(n)= T(n / 2)+ 2 ^ n是否可能?
如何衡量此重现的时间复杂度。谢谢
答案 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)