程序的复杂性有两个外部for循环运行n次,一个循环运行4次inside.second for循环

时间:2014-06-23 18:01:19

标签: algorithm

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

对于我所知道的是这将是O(n)次,因为循环的常量将运行4n次。

所以在这种情况下它会遵循相同的逻辑,因为它有一个额外的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)??

3 个答案:

答案 0 :(得分:4)

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

当然第三个嵌套循环确实使程序运行得更慢。但是,由于减速是一个常数因子,用big-O表示法表示的程序的渐近时间不会改变。

答案 1 :(得分:4)

让我们分解一下:

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

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

答案 2 :(得分:0)

尝试清楚说明使用'+'或'*'

的逻辑

// code 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)

希望你有所作为