推 gary19941208: 3.已經sorting了,把三個merge花O(n),中位數當root01/23 07:53
→ gary19941208: ,左右半部遞迴去做,總共是O(n)01/23 07:53
merge花O(n)
剩下的只要遞迴建樹就好 原來如此
那第二題呢?
※ 編輯: newpuma (223.137.200.66), 01/23/2017 08:05:34
推 yupog2003: 第二題我是舉一個skew-binary tree,然後多做幾次觀察 01/23 08:29
→ yupog2003: 確實是O(logn) 01/23 08:30
推 FRAXIS: 如果是一個 binary tree 每個 node 只有右子樹 也可以在 01/23 09:53
→ FRAXIS: O(lg n) 時間內 rotate 到 balance ? 01/23 09:53
推 Transfat: 對每個點從unbalanced到balanced要花O(1),總共要做O(log 01/23 10:23
→ Transfat: )次,是嘛(?) 01/23 10:23
→ ken52011219: 它不是問幾次rotations嗎 ,無關時間複雜度吧 01/23 10:36
推 FRAXIS: 我是這樣想 每次 rotation 頂多只能把樹高減少一層 01/23 10:43
→ FRAXIS: 如果 unbalnaced tree height 是O(n) 01/23 10:44
→ ken52011219: 我認為是O(n/2) 01/23 10:44
→ FRAXIS: 要怎麼用 O(lg n) rotations 把它 balance? 01/23 10:44
推 yupog2003: 我剛剛發現我rotation的方式錯了,應該是O(n/2)沒錯 01/23 10:46
→ yupog2003: 每次rotation,左邊-1,右邊+1 01/23 10:46
→ yupog2003: 剛剛想成用折的,所以錯了 01/23 10:47
→ ken52011219: 每個binary search tree n個點共有n-1種 rotation 01/23 10:53
→ ken52011219: 目前可知在O(n-1) rotations內一定可以完成balance 01/23 10:54
→ ken52011219: F 大的所說的方式應該是最保險的 01/23 10:55
推 yupog2003: 感謝k大和F大的糾正QQ 01/23 11:00