我理解如何获得嵌套循环的大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))
是吗?
答案 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 的高值,代码将在恒定时间内跳过内部循环。