大O - 嵌套循环细分循环

时间:2015-09-29 23:55:37

标签: c++ algorithm big-o

我理解如何获得嵌套循环的大O的一般情况,但是嵌套for循环中每个循环的操作是什么?

如果我们有:

for(int i=0; i<n; i++)
{
    for(int j=i+1; j<1000; j++)
    {
        do something of constant time;
    }
}

我们究竟如何获得T(N)?外部for循环将是n次操作,内部将是1000(n-1)而内部将是c是正确的?

所以T(n)=cn(1000(n-1))是吗?

1 个答案:

答案 0 :(得分:0)

您想要折叠循环并进行双重求和。当 i = 0时,运行1000-1次。当 i = 1时,您运行1000 - 2次,依此类推至 n-1 。这相当于系列999的 i = 0到 n 之和 - i ,注意你可以分开这些术语并获得999 n - n n - 1)/ 2。

这是一个非常奇怪的公式,因为一旦 n 达到1,000,内部循环立即短路并且什么都不做。在这种情况下,渐近时间复杂度实际上是O( n ),因为对于 n 的高值,代码将在恒定时间内跳过内部循环。