这个算法的时间复杂度是否正确?

时间:2016-03-20 22:37:19

标签: algorithm time-complexity

我已经解决了波纹管算法,发现时间复杂度为

O(nlgn *日志(base3)N)

for (a=1;a<=n;a++)

   for (b=1;b<=n/2;b++)

     for (c=1;c<=n;c*=3)

        print("A")

现在我有了这个其他算法:

for (a=1;a<=n;a++) 

      for (b=1;b<=a^2;b++)

          for (c=1;c<=n/2;c++)

            print("A2")

时间复杂度是否为O(n ^ 4 lgn)?如果没有请解释原因。 谢谢

1 个答案:

答案 0 :(得分:2)

我担心你错误地说第一个算法的时间复杂度是O(n * lgn * log 3 n)。它是O(n 2 * log 3 n)。 b的循环在O(n)中运行而不在O(lgn)中运行。

在第二个算法中,让我们看看c循环,它是T c = O(n)。如果我们省略c循环,我们实际上会减少O(n)中的时间,因此c循环会将n的乘数带到时间复杂度公式。

我们来看看abb取决于a的值。执行b循环体的次数是

T a,b = 1 + 4 + 9 + 16 + ... + n 2

这是一个众所周知的自然数平方和公式。

Σn 2 = n(n + 1)(2n + 1)/ 6 = O(n 3

最终我们有

T a,b,c = T a,b * T c = O(n 3 )* O(n)= O(n 4

我出于某种原因看到你将n/2与O(lgn)联系起来。循环for(i=1;i<=n/2;i++)的运行时间比for(i=1;i<=n;i++)少两倍,不是吗?它们都具有复杂度O(n)。它与lgn无关。