这个程序是二次还是线性?

时间:2015-10-04 05:26:03

标签: algorithm time-complexity

我有以下伪代码:

for i=1 to 3*n
         for j=1 to i*i
                for k=1 to j
                    if j mod i=1 then
                         s=s+1
                    endif
                next k
         next j
next i

当我想分析执行部分s = s + 1的次数时,假设此操作需要恒定时间,我最终得到二次复杂度或者是线性的吗? n的值可以是任何正整数。

我所做的计算如下:

enter image description here

2 个答案:

答案 0 :(得分:0)

绝对不是二次方,但至少应该是多项式。

经历3n次迭代。

在每次迭代时,它会更多地进行9n 2

在每一项上,它最多可以达到9n 2

所以我认为这将是O(n 5 )。

答案 1 :(得分:0)

在谈论运行时间时,您应该始终明确说明您的运行时间。

如果我们假设您在讨论n的运行时间,答案是O(n^5)。这是因为当我们摆脱常数因素时,你所做的就归结为此:

do n times:
   do n^2 times:
       do n^2 times:
           do something

n * n^2 * n^2 = n^5