我有點困惑的下面的代碼段的時間複雜度的環的複雜性(極限是硬編碼的報價爲例):時間隨增量
loss = 3;
for(i=0;i<=10;)
{
i += loss;
loss = loss - 0.3; //loss keeps decreasing by some fixed value
}
這裏,儘管可變i
正在不斷增加接近終止循環,但它增加的速度本身是可變的。
我有點困惑的下面的代碼段的時間複雜度的環的複雜性(極限是硬編碼的報價爲例):時間隨增量
loss = 3;
for(i=0;i<=10;)
{
i += loss;
loss = loss - 0.3; //loss keeps decreasing by some fixed value
}
這裏,儘管可變i
正在不斷增加接近終止循環,但它增加的速度本身是可變的。
在此特定示例中,時間複雜度爲O(1)
,因爲由於它沒有參數,所以執行時總是需要相同的時間。
如果這個數字10
在for循環參數n
這將是O(n)
一個小n
,如果n
是足夠大的「損失」最終將成爲負,程序會永遠運行下去。 「損失」以不變的數量影響時間複雜性。
它不會是O(n) - 對於大n,寫入的代碼不會終止。 –
@保爾絕對正確,「損失」最終會是負面的,它會永遠運行 – Davide
如果用大數代替「10」,則循環將永遠不會終止,因爲在某個時刻'loss'將變爲負數。 –