2012-06-02 73 views
19

我在HERE之前詢問過這個,但是我希望快速選擇(基於快速排序)的解釋進一步簡化。我問的前一個問題包括一些示例代碼(所以你知道我在說什麼)。快速選擇算法 - 簡單解釋

我想知道是否有人在任何地方的任何地方總結了快速選擇作爲遊戲的規則和指導方針,在這裏可以通過遵循易於理解的規則來學習算法是如何工作的,可以應用於讓我們說一副牌或紙上的數字。

我認爲快速選擇算法的簡單解釋對於我理解它的工作原理至關重要,因爲我仍然收到的教程和解釋很難理解和可視化。即使YouTube上將視頻轉換成舞曲的視頻也沒有太大幫助。

在此先感謝堆棧,到目前爲止您一直是一個很好的幫助。

+0

什麼*確切*你不明白? – Gumbo

+0

樞軸的概念,以及它如何在整個遞歸過程中重複選擇,以及如何拆分列表以及如何操作每個子列表。 – Edge

+0

數據透視表只是您選擇用於幫助遞歸的列表中的一個點(例如,未排序列表中的第一項)。這將爲您得到的列表的兩半提供隨機性,所以更有可能在兩半之間得到均勻分佈。 –

回答

125

你走進一個包含200名兒童的健身房。這是9月8日,所以你有一個渴望找到第98個最矮小的孩子。你知道你可以將它們從最短到最高排成一行,但那會持續下去。 「我知道」,你認爲,「我可以使用QUICKSELECT!」

你走出人羣,閉上你的眼睛,伸出你的手指,並旋轉三次。當你睜開眼睛時,你直接指向一個孩子Peter Pivot。你說:「快,每個比彼得都短的人,站在這裏,每個人都比彼得高,站在那裏,如果你和彼得一樣高,你可以進入任何一組。」

孩子們洗牌,很快他們站在兩個小組。你計算並找到較短組中的120名兒童,以及較高組中的79名兒童。你知道第98個最矮的孩子必須在較矮的小組中,所以你告訴彼得和79個更高的孩子坐在看臺上。

你再閉上你的眼睛,伸出你的手指,並旋轉三次。當你睜開你的眼睛時,你直接指向彼得的姐姐,寶拉皮奧特。你說:「快!那些還站着的人,如果你比寶拉短,站在這裏,如果你比寶拉高,站在那裏,如果你是同一個高度,你可以進入任一組。「

孩子們洗牌,很快他們站在兩個小組。你計算並找到較短組中的59名兒童,以及較高組中的60名兒童。你知道第98個最矮的孩子必須在更高的組中,所以你告訴寶拉和59個矮小的孩子坐在看臺上。

你再閉上你的眼睛,伸出你的手指,並旋轉三次。當你睜開眼睛時,你直接指向寶拉的表弟Prudence Pivot。你說:「快!那些還在站立的人,如果你比普魯登斯短,站在這裏,如果你比普魯登斯高,站在那裏,如果你是同一高度,你可以進入任一組。「

孩子們洗牌,很快他們站在兩個小組。你計算並找到較短組中的37名兒童,以及較高組中的22名兒童。你知道寶拉和另外59個矮小的孩子正坐在看臺上。除了37個較矮的孩子仍然站立,你知道共有97個孩子比Prudence短。所以,普律當絲是第98個最矮小的孩子!

Quickselect FTW!

+16

我不確定我現在更喜歡哪種 - 笑或感覺到知情。這可能是我讀過的最驚人的故事,絕對是該算法的最好和最容易理解的解釋。你先生,應該得到一枚非常閃亮的獎章。 :D – Edge

+1

那麼這種策略會假定孩子(數據列表)是未排序的?那麼每個孩子在進入他們的小組之前都必須將他/她自己與關鍵點進行比較? – Edge

+15

是的。對於QuickSelect,您始終認爲數據未排序,因爲如果它已經排序,則可以直接轉到所需的插槽。 –