快速选择算法 - 简化说明

Edg*_*dge 25 algorithm select

我以前就问过这个这里,但是我希望有quickselect的进一步简化的解释(基于快速排序).我问的上一个问题包括一些示例代码(所以你知道我在做什么).

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

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

在提前感谢Stack,到目前为止你已经得到了很大的帮助.

Chr*_*aki 145

你走进一个容纳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!

  • 我不确定我现在更喜欢哪个 - 笑或者感觉更有信息.这很可能是我读过的最神奇的故事,绝对是算法的最佳和最容易理解的解释.先生,你应该获得一枚非常闪亮的奖章.:d (17认同)
  • 是.对于QuickSelect,您始终假设数据未排序,因为如果它已经排序,您可以直接转到所需的插槽. (15认同)