2012-06-02 53 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,您始终认为数据未排序,因为如果它已经排序,则可以直接转到所需的插槽。 –