我想弄清楚使用大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循環的集合。 –