大O -嵌套For循环逐个循环分解

Big O - Nested For Loop Breakdown Loop by Loop

本文关键字:循环 分解 For 嵌套      更新时间:2023-10-16

我理解如何获得嵌套循环的大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))对吗?

您想要折叠循环并执行双重求和。当i = 0时,运行1000-1次。当i = 1时,运行1000 - 2次,以此类推,直到n-1。这等价于从i = 0到n对级数999 - i求和,注意你可以把这两项分开得到999 n - n (n - 1)/2。

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