我只是想確保我正朝着正確的方向前進。我想通過遞歸分割找到數組的最大值,並找到每個單獨數組的最大值。因爲我分裂它,它會是2 * T(n/2)。而且因爲我必須對2個數組做最後的比較,所以我有T(1)。 所以將我的遞推關係是這樣的:最近遞歸找到max的時間複雜度是多少
T = {2 * T(N/2)+ 1,當n> = 2; T(1),當n = 1;
因此,我的複雜性是Theta(nlgn)?
我只是想確保我正朝着正確的方向前進。我想通過遞歸分割找到數組的最大值,並找到每個單獨數組的最大值。因爲我分裂它,它會是2 * T(n/2)。而且因爲我必須對2個數組做最後的比較,所以我有T(1)。 所以將我的遞推關係是這樣的:最近遞歸找到max的時間複雜度是多少
T = {2 * T(N/2)+ 1,當n> = 2; T(1),當n = 1;
因此,我的複雜性是Theta(nlgn)?
您編寫的公式似乎是正確的,但您的分析並不完美。
T = 2*T(n/2) + 1 = 2*(2*T(n/4) + 1) + 1 = ...
對於第i次迭代,你會得到:
Ti(n) = 2^i*T(n/2^i) + i
現在你想知道我做N/2^i等於1(或幾乎任何恆定的,如果有什麼你喜歡),所以你達到n = 1的最終條件。 這將是解決方案n/2^I = 1 - > I = Log2(n)。植物它方程鈦在,你會得到:
TI(n) = 2^log2(n)*T(n/2^log2(n)) + log2(n) = n*1+log2(n) = n + log2(n)
,你會得到T(N)= O(N + LOG 2(N)(就像@bdares說)= O(N)(就像@ bdares說)
不,不...您每次遞歸都需要O(1)次。
有幾個?
有N片葉子,所以你知道它至少是O(N)。
你需要比較幾個才能找到絕對最大值?那是O(log(N))。
把它們加在一起,不要繁殖。 O(N + log(N))是你的時間複雜度。
感謝您的澄清 – Dan 2011-04-26 09:31:28
寫O(n + log(n))是否正常?看起來像O(n)就足夠了,在* every *事件中。事實上,爲什麼要像這樣軟球呢?我覺得寫O(n + log(n)),雖然沒有錯,但很愚蠢。我們不爲Bubblesort寫O(n^2 + n)。我錯過了什麼嗎?如果你只是用於說明目的,那麼確定;我想對我來說有點不可思議,因爲我沒有看到最後一步......所以如果是這樣的話,只要把它當作批評風格而不是內容。 – Patrick87 2011-10-21 16:11:40
@bdares你說得對。我應該添加最後一步。爲避免混淆,我避免跳過(n + log(n))部分,但我應該確保添加最後一部分。 – Neowizard 2011-10-22 06:39:11