看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《assassin88 (2010)》之銘言: : 如果題目給的 code 如下: : void R(int n) : { if (n <= 1) : return 2; : else : return (2*R(n/2) + 2*R(n/2)); ------ ------ 1 2 : } : 請問複雜度是多少? : 我式子列這樣↓ : T(n) = 2T(n/2) + 1 : T(1) = 1 : 算出來複雜度為Θ(n),但是答案是給Θ(nlgn),請問我式子列錯嗎? : 請指導..複雜度好難算..有什麼比較好的技巧嗎? : 感謝 因為每次的recurrece都執行 O(1) 個指令 而且每次遞迴會縮減為 R( n/2 ) 執行兩次 (如我的圖) 所以時間函數是 T(n) = 2 T( n/2 ) + O(1) , T(1) = O(1) 解複雜度的方法: 1. master method: 令 f(n) = O(1), a=2 , b=2 => 取 c = lg 2 > 0 lg2 - c => f(n) = O(1) = O(n ) => T(n) = O( n ) 2. 代入法: T(n) = 2 T(n/2) 2 2 = 2 T(n/ 2 ) k k = ... = 2 T(n/2 ) 令k = lg n lg n lg2 => T( n ) = 2 T(1) = n * O(1) = O( n ) 有點忘了...希望沒錯能幫上忙囉^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.191.174