【发布时间】:2015-05-08 00:26:50
【问题描述】:
我是一名在大学学习算法课程的学生。我知道如何应用一些递归技术来查找更简单函数的运行成本,但是这个问题中的2^n 给我带来了麻烦。这是我尝试应用主定理的方法
a=1, b=2 n^log2(1)= n^0.65
这导致n^0=1 我知道它必须是f(N) 的多项式乘以2^n 但我看不出这与2^n 有什么可比性。
我也尝试过使用递归树,但它太复杂了。
【问题讨论】:
我是一名在大学学习算法课程的学生。我知道如何应用一些递归技术来查找更简单函数的运行成本,但是这个问题中的2^n 给我带来了麻烦。这是我尝试应用主定理的方法
a=1, b=2 n^log2(1)= n^0.65
这导致n^0=1 我知道它必须是f(N) 的多项式乘以2^n 但我看不出这与2^n 有什么可比性。
我也尝试过使用递归树,但它太复杂了。
【问题讨论】:
您可以应用here 中描述的主定理的第三种情况,因为 f(n) 等于 Ω(nloga)。
Here,
f(n) = 2^n , and
Ω(n^log 1) = Ω(1)
2^n = Ω(1) ,因为对于一些常数 c>0 并且所有足够大的 n,2^n ≥ c*1。
所以 T(n) = f(n)
T(n) = O(2^n)
【讨论】:
没有主定理也很容易做到:
T(n) = T(n / 2) + 2^n)
= T(n / 4) + 2^(n / 2) + 2^n
= ...
< 2^0 + 2^1 + ... + 2^n
= [2^(n + 1) - 1] / (2 - 1) (sum of a geometric progression formula)
=> T(n) = O(2^(n + 1)) = O(2*2^n) = O(2^n)
【讨论】: