for循环的运行时

时间:2012-06-03 22:00:04

标签: for-loop runtime

大O表示法中这个嵌套for循环的运行时是什么?

for(i = 1 to k)
{
    for(j = i+1 to k)
    {}
}

它小于O(k ^ 2)但我无法弄明白。

1 个答案:

答案 0 :(得分:4)

您的问题与系列和 S(k)= 0 + 1 + 2 + ... +(k-2)+(k-1)密切相关。可以证明 S(k)=(k *(k-1))/ 2 =(k * k)/ 2 - k / 2. [怎么样?将总和重新排序为 S(k)= {0+(k-1)} + {1+(k-2)} + {2+(k-3)} + .... 这显示了如何。]

因此,小于 O(k * k)的算法顺序?请记住像 1/2 这样的常数系数不会影响大O符号。

问题:所以它相当于用j = i+1 to k替换j = 1 to k

答案:是的。这很棘手,所以让我们考虑一下。对于i == 1,内循环的动作运行了多少次?答:它运行k-1次。同样,对于i == 2,内循环的动作运行了多少次?答:它运行k-2次。最终,对于i == k,内循环的动作运行了多少次?答:它运行零次。因此,在i的所有值上,内循环的动作运行了多少次?答案:(k-1) + (k-2) + ... + 0,这就是前面提到的总和 S(k)