Re: [問題] 演算法..找第二小的元素(n+logn-2比較)

看板CSSE (電腦科學及軟體工程)作者 (yo)時間14年前 (2010/05/06 17:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《mqazz1 (無法顯示)》之銘言: : 我想請教一題演算法.. : Show that the second smallest of n elements : can be found in (n+logn-2) comparisons in the worst case. : 找第二小的元素 : 在最差狀況下 : 可以使用 n + logn - 2 次比較找到 : 請問這題應該從哪個部份下手會比較方便呢? 我看過的做法如下: 先把 n 個元素每兩個放在一組, 每一組做一次比較取出較小的元素 o o <= 底層每兩個元素比較, 較小者勝出 / \ / \ o o o o <= 原本有 n 個元素, 放在底層 然後把每一組取出的較小元素繼續兩兩一組, 每一組做一次比較取出較小的元素 o / \ / \ o o / \ / \ o o o o 這樣直到取得最小元素, 共做了 n-1 次比較 --- 因為每次比較恰好淘汰一個元素. 接著, 第二小元素一定有與最小元素比較過 --- 因為第二小元素在上面那個 tree 裡面, 最終沒有勝出 (i.e., 被放到頂上), 這一定是被最小元素打敗的. 而與最小元素做過比較的元素頂多 lg n 個, 在這 lg n 個裡面取最小的元素只要 lg n-1 次比較, 這也就是全部 n 個數裡面的第二小數! 總共比較次數為 n-1 + lg n - 1 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.124.99.236
文章代碼(AID): #1Buekw6R (CSSE)
文章代碼(AID): #1Buekw6R (CSSE)