我正在学习算法导论,我对练习的答案感到困惑:
10*log10
= O(log n^2
)
//我认为它应该是10 * log10 = Theta(log n ^ 2)
n^1.01
=欧米茄(n* (log n)^2
)
//我认为n^1.01
= O(n* (log n)^2
)
(log n)^log n
=欧米茄(n / log n
)
//我认为(log n)^log n
= O(n / log n
)
n*2^n
= O(3^n
)
//我不知道如何证明这一点......
我的想法是否正确?我很感激您是否可以提供这四个问题的证据。
非常感谢。
答案 0 :(得分:2)
我认为你这些事情令人困惑。复杂性理论中的平等(=)必须被理解为“属于阶级”而不是“等于”。然后你必须清楚地意识到Big-Oh符号(以及其他omegas和thetas ......)的含义。例如,O(n)表示增长不快于线性函数的所有函数。更正式地,如果f(n)= O(n)(读“f(n)属于类O(n)”),则存在常数c,使得对于任何n:f(n)<1。 C *ñ。例如,f(n)= n和f(n)= log(n)都属于O(n)(即它们的增长速度不快)。
让我们考虑一下您的例子:
n * 2 ^ n = O(3 ^ n)。
为了证明我们必须找到一些常数c:
n * 2 ^ n&lt; c * 3 ^ n;
一些数学: n * 2 ^ n&lt; c * 3 ^ n =&gt; n&lt; c *(1.5)^ n;
你可以很容易地看到,即使对于c = 1,这也证明了这一点。 同样,请确保您很好地理解复杂性术语。