我想弄清楚使用大O表示法for循环的复杂性。我之前在其他课上做过这个,但是这个比其他课更加严格,因为它是基于实际的算法。代码如下:双循环的复杂性
for(cnt = 0, i=1; i<=n; i++) //for any size n
{
for(j = 1; j <= i; j++)
{
cnt++;
}
}
和
for(cnt = 0, i=1; i<=n; i*=2) //for any size n
{
for(j = 1; j <= i; j++)
{
cnt++;
}
}
我已经到达第一环是O(n)的复杂性,因为它会通过列表n次。至于第二圈,我有点失落。我相信对于每个被测试的n,它都会经历循环。我(错误地)认为这意味着每次评估时循环都是O(n * i)。在我的假设中有什么是我错过的。我知道cnt ++是恒定的时间。
谢谢你在分析中的帮助。每个循环都在自己的空间中,它们不在一起。
第一个样本不在O(n)中,您是否尝试在循环后使用不同的n值打印cnt? – Kwariz
@Kwariz我道歉。我的意思是第一个例子中第一个最外层的循环是O(n)。在第一个例子中,不是整个double for循环的集合。 –