我已经解决了波纹管算法,发现时间复杂度为
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)?如果没有请解释原因。 谢谢
答案 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
的乘数带到时间复杂度公式。
我们来看看a
和b
。 b
取决于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无关。