2014-06-23 44 views
3
for($j=1;$j<=$n;$j++) 
{ 
    for($k=1;$k<=4;$k++) 
    { 
     # o(1) operation 
    } 
} 

为此,我已经发现这是将O(n)倍作为循环的常量将运行4n次。程序的复杂性有两个外部for循环运行n次,一个for循环运行4次inside.second for循环

因此,在这种情况下,将它遵循相同的逻辑,因为它已得到一个额外的for循环中,装置内将运行4N倍+外环:

for($i=1;$i<=$n;$i++) 
{ 
    for($j=1;$j<=$n;$j++) 
    { 
     for($k=1;$k<=4;$k++) 
     { 
      #o(1) operation 
     } 
    } 
} 

会是为O(n^2)或O(n^2)+ O(4)??

+1

它应该是O(4 * N * N)那就是〜O(n * n) – x0v

+0

'O(n^2)+ O(4)'与'O(n^2)'相同。 –

回答

4

它是O(N )。由于4是一个独立于N的常量,因此它不会更改big-O的结果。

当然,第三个嵌套循环的确会让程序运行速度变慢。然而,由于减速是一个常数因子,以大O符号表示的程序的渐近时间不会改变。

4

让我们来分析一下:

  • 外环 - n次迭代
    • 1内环 - n次迭代
      • 第二内环 - 4次迭代
        • 循环动作 - O(1 )

这总计在O(n*n*4*1) = O(4*n^2) = O(n^2)

0

尽量让自己明确使用 '+' 或 '*'

//代码1

for($i=1;$i<=$n;$i++) 
{ 
for($j=1;$j<=$n;$j++) 
{ 
    for($k=1;$k<=4;$k++) 
    { 
     #o(1) operation 
    } 
} 
} 

这是逻辑O(4 * n * n)〜O(n * n)

//代码2

for($i=1;$i<=$n;$i++) 
{ 
for($j=1;$j<=$n;$j++) 
{ 
     #o(1) operation 
} 
} 

for($k=1;$k<=4;$k++) 
    { 
     #o(1) operation 
    } 

同时这也是O(N * N)+ O(4)〜O(N * N)

希望你有差别

+0

如果您对此投票,请留下意见和理由。在没有任何评论的情况下投票没有意义 – x0v

+1

像O(4 * n * n)这样的表达式可以简化为O(n * n)。此外,使用这种符号可能会引起混淆(因为它可能看起来像O(3 * n * n)和O(4 * n * n)是不同的东西,但它们都是O(n * n))。 – kraskevich

+0

我已经在评论部分提到O(4 * n * n)〜O(n * n) – x0v