2016-11-26 106 views
-1
for i = 1 to n do 
    for j = 1 to i do 
     for k = 1 to j do 

「n」的時間複雜度是多少?給定片段的時間複雜度是多少?

+1

你在這個問題上做了什麼工作?例如,你可以說明'j'的複雜性和確切的公式嗎?有關'k'的確切公式,使複雜性變得很明顯,請參閱[四面體數字](https://en.wikipedia.org/wiki/Tetrahedral_number)。 –

+0

看起來像n^3。雖然我在時間複雜性方面非常糟糕,所以我可能是錯的。而且,這些標籤中的大部分都是不相關的。 – byxor

+0

我已經按照建議移除了標籤。 @BrandonIbbotson –

回答

1

最內圈將明顯運行j次。假設它包含價值100個單位時間的操作,這將是:

T_inner(j) = j 

環路中間將運行i倍,即

T_middle(i) = Sum {j from 1 to i} T_inner(j) 
      = Sum {j from 1 to i} j 
      = i/2 * (1 + i) 

最後:

T_outer(n) = Sum {i from 1 to n} T_middle(i) 
      = Sum {i from 1 to n} (i/2 * (1 + i)) 
      = 1/6 * n * (1 + n) * (2 + n) 
      = 1/6 n^3 + 1/2 n^2 + 1/3 n 

這顯然是O(n^3)

注意:這隻會計算最內側塊中的操作。它忽略了執行循環所需的操作。但是如果你包含這些,你會發現時間複雜度是一樣的。

+0

謝謝! @NicoSchertler,它的工作原理:) –

+0

所以通常當算法的複雜性被討論時,他們是否考慮循環所需的操作,還是它總是被忽略? –

+0

維護循環所需的操作將始終與迭代次數(加上初始化操作)成比例。所以,這與向內部塊添加恆定量相似。最終,這並不會改變複雜性。 –

相關問題