快速选择算法 - 简化说明

时间:2012-06-02 09:57:36

标签: algorithm select

我在HERE之前问过这个问题,但是我希望能够进一步简化quickselect(基于quicksort)的解释。我问的上一个问题包括一些示例代码(所以你知道我在做什么)。

我想知道是否有人在任何地方总结了快速选择作为游戏的规则和指南,人们可以通过遵循易于理解的规则来学习算法是如何工作的,这些规则可以应用于让我们说一副牌或数字在一点纸上。

我认为快速选择算法的简化解释对我理解它是如何工作至关重要,因为我收到的教程和解释仍然很难掌握和可视化。甚至连youtube上的视频都能将快速节目变成舞蹈也没有太大帮助。

先谢谢Stack,到目前为止你一直很好。

1 个答案:

答案 0 :(得分:141)

你走进一个容纳200个孩子的体育馆。这是9月8日,所以你渴望找到第98个最短的孩子。你知道你可以将它们从最短到最高排列,但这需要永远。 “我知道”,您认为,“我可以使用QUICKSELECT!”

你走进人群,闭上眼睛,伸出手指,旋转三次。当你睁开眼睛时,你直接指着其中一个孩子Peter Pivot。你说,“很快!每个人都比彼得短,来到这里站立。每个人都比彼得高,站在那里。如果你和彼得一样高,你可以进入任何一组。”

孩子们四处乱窜,不久他们就站在了两组。你可以在较短的组中找到120个孩子,在较高的组中找到79个孩子。你知道第98个最短的孩子必须在较短的一组,所以你告诉彼得和79个更高的孩子坐在露天看台。

你再次闭上眼睛,伸出手指,旋转三次。当你睁开眼睛时,你正指着彼得的妹妹Paula Pivot。你说,“快点!那些还在站着的人。如果你比Paula短,请站在这里。如果你比Paula高,那就站在那里。如果你的身高相同,你可以进入任何一组。“

孩子们四处乱窜,不久他们就站在了两组。你可以在较短的组中找到59个孩子,在较高的组中找到60个孩子。你知道第98个最短的孩子必须在较高的组中,所以你告诉Paula和59个较矮的孩子坐在看台上。

你再次闭上眼睛,伸出手指,旋转三次。当你睁开眼睛时,你正指着Paula的堂兄Prudence Pivot。你说,“快点!那些仍然站着的人。如果你比普律当丝短,请站在这里。如果你比普律当丝高,那就站在那里。如果你的身高相同,你可以进入任何一组。“

孩子们四处乱窜,不久他们就站在了两组。你可以在较短的组中找到37个孩子,在较高的组中找到22个孩子。你知道Paula和其他59个较矮的孩子正坐在露天看台上。随着37名较短的孩子仍然站着,你知道总共有97名孩子比普律当丝短。因此,普律当丝是第98个最短的孩子!

快速选择FTW!