2017-09-27 47 views
1
function alg1(n) 
1 a=0 
2 for o=1 to n do 
3  for t=1 to o do 
4   for k=t to o+t do 
5   a=a+1 
6 return(a) 

如果有人能指導我如何找到最糟糕的情況,以及如何獲得alg1的輸出作爲n的函數,我將非常感激。謝謝!從最後的循環你會如何去發現這個算法的複雜性?

+1

可能重複[大O,你如何計算/近似它?](https://stackoverflow.com/questions/3255/big-o-how-do-you-calculate-approximate-it) – 4castle

+0

Subtract t來自第三個循環計數器,它不影響結果。然後記下o = 1,2等內部循環的數量。捕捉模式 – MBo

回答

1

減牛逼,使之成爲

for k=0 to o do 

現在2個內最環路將辦理O運行(O^2)時間爲鄰的每個值。答案是

1^2 + 2^2 + ... n^2 

其等於

N(N + 1)(2N + 1)/ 6。因此,它的順序爲O(n^3)

+0

謝謝!也非常有幫助。 – Quabs

3

我們可以計算這個代碼執行的增量的確切數目。首先,讓我們來取代

for k=t to o+t do 

for k=1 to o+1 do 

這一變化後,兩個內環看起來像這樣

for t=1 to o do 
    for k=1 to o+1 do 

這些循環的迭代次數顯然是o*(o+1)。迭代的總數可以通過以下方式計算: enter image description here

我們可以用大O符號時排除係數多項式的低階方面。因此,其複雜性爲O(n^3)

+0

此評論非常有幫助,謝謝!快速問題,爲什麼最內層循環簡化爲k = 1到o + 1而不是k = 1到o?我想如果你通過減去t來簡化這個循環,那麼它會出現在k = 1到0之間。 – Quabs

+0

是不是因爲如果你從內部循環中減去t,它實際上最終會成爲k = 0到o,這與k = 1到o + 1相同? – Quabs

+0

@Quabs是的,沒錯 – DAle