算法导论的时间复杂度

时间:2014-11-04 00:56:36

标签: algorithm time-complexity

我正在学习算法导论,我对练习的答案感到困惑:

  1. 10*log10 = O(log n^2
    //我认为它应该是10 * log10 = Theta(log n ^ 2)

  2. n^1.01 =欧米茄(n* (log n)^2

    //我认为n^1.01 = O(n* (log n)^2

  3. (log n)^log n =欧米茄(n / log n

    //我认为(log n)^log n = O(n / log n

  4. n*2^n = O(3^n

    //我不知道如何证明这一点......

  5. 我的想法是否正确?我很感激您是否可以提供这四个问题的证据。

    非常感谢。

1 个答案:

答案 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,这也证明了这一点。 同样,请确保您很好地理解复杂性术语。