我正在尝试使用 Big 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 ,它都会经过 i 次循环。我(错误地)假设这意味着每次评估循环都是 O(n*i) 。我的假设中有什么遗漏的吗?我知道 cnt++ 是常数时间。
感谢您在分析中的帮助。每个循环都在自己的空间中,它们并不在一起。