Re: [理工] 演算法 求時間複雜度

看板Grad-ProbAsk作者 (白飯)時間12年前 (2013/11/09 23:03), 編輯推噓2(207)
留言9則, 4人參與, 最新討論串2/2 (看更多)
另開板 先解釋這題一下 這題是變化題 不能用master也不是調和數列 原PO已經用遞迴樹種出來是n*Σi=1~logn 1/(i^2)了 至於Σ1/(i^2)等於Θ(?) 其實證明跟調和數列很像 調和數列怎麼證的?Σi=1~n 1/(i) 也就是黎曼和積分 簡單來說n越大時 就越接近某區域面積 證調和數列利用∫(上底n 下底1)1/x dx 最後就會證出Θ(logn) 方便標誌 上底n 下底1= 1_n 我直接忽略上黎曼(上限)和下梨曼(下限)簡單證就好 同理 Σ1/(i^2) 利用∫1_n 1/x^2 dx =-1/x | 1_n = 1-(1/n) =(n-1)/n=Θ(1) 此題我用展開 再展一次好了 T(n)=2T(n/2)+ n/(lgn)^2 =2( 2T(n/4)+ (n/2) / (lg(n/2))^2 ) + n/(lgn)^2 =4T(n/4)+ n/(lgn)^2 + n/(lg(n/2))^2 歸納得 2^k T(n/2^k) + n* [ 1/(lgn^2) + 1/(lg(n/2)^2)+.....+1/(lg(n/2^(k-1)) ] 令n=2^k (k=lgn) 使得T(n/2^k)=T(1)=c(常數) 因此得 n*c+ n * [ 1/lgn^2 + 1/((lgn-2)^2) + ..... + 1/1^2 ] 最後整理得 T(n)=n*c+ n * Σi=1~logn 1/(i^2) (P.S 要注意的地方 它是1到lgn 所以 積分上底不是n 是lgn!! 也就是∫1_lgn 1/x^2 dx = lgn-1/lgn 雖然還是Θ(1)) 所以T(n)=n*c + n*Θ(1) = Θ(n) ) 為什麼要注意的呢 同樣類變化題T(n)=2T(n/2)+ n/(lgn) 展開最後 才是調和數列1/1+1/2+....1/lgn 上底是lgn 因為∫1_lgn 1/x dx = lglgn-1 = Θ(lglgn) 所以此題是Θ(n*lglgn) (展開或離散都可以解出來@@ 甚至樹 上面那題 離散不太好解==) 至於為什麼有些狀況不能用master 隨便舉例好了T(n)=2T(n/2)+ n*lgn loga_b=1 D大你覺得 n和nlgn 後者growth order>前者 為什麼不是T(n)=Θ(n*lgn) 而是by case2 T(n)=Θ(n*lgn*lgn) 同樣T(n)=2T(n/2)+ lgn n和lgn 且前者growth order>後者 但卻是 Θ(lgn*lgn) (以上舉例通通可以用展開或離散解 可以去證證看) 我是認為master的精神感覺是離散的轉換法總結 可是在判斷loga_b時 遇到 比較特別的f(n) 要稍微注意一下 因為很多case 有些master遇到變化f(n)很容易出錯 反而離散和展開 最可靠(雖然離散遇到機車的題目會很麻煩= =) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.231.45.156

11/10 08:55, , 1F
推一個!
11/10 08:55, 1F

11/10 13:42, , 2F
非常感謝!!!
11/10 13:42, 2F

11/11 16:18, , 3F
我想問T(n)=2T(n/2)+ lgn => Θ(lgn*lgn) 怎麼看的!!
11/11 16:18, 3F

11/11 16:19, , 4F
上網結果:T(n) = nT(1)+(lg2)(2n-lgn-2) = nT(1)+2n-lgn-2
11/11 16:19, 4F

11/11 16:20, , 5F
感覺是O(n)..麻煩幫解疑惑THX..
11/11 16:20, 5F

11/11 17:34, , 6F
阿你是對的 我隨手拿洪X題庫舉例沒驗證沒想到他錯的XD
11/11 17:34, 6F

11/11 17:36, , 7F
其實不用上網查 把它當離散來寫or展開多半答案就出來了
11/11 17:36, 7F

11/11 17:41, , 8F
因為自己展開無法歸納clsed form..才上網找..哈哈..
11/11 17:41, 8F

11/11 17:42, , 9F
不過還是要感謝你..看完觀念又再次清楚了..
11/11 17:42, 9F
文章代碼(AID): #1IVawzAP (Grad-ProbAsk)
文章代碼(AID): #1IVawzAP (Grad-ProbAsk)