【发布时间】:2012-02-18 17:30:56
【问题描述】:
CLRS 第 3 版“最坏情况线性时间的选择”中的第 9.3 节讨论了“选择”算法(由于 Blum、Floyd、Pratt、Rivest 和 Tarjan,有时称为 BFPRT 算法)用于查找在最坏的情况下在 O(n) 时间内列出。当我试图在白板上运行示例时,我有点困惑。我知道每次调用“Select”时可以消除一定数量的元素(我读过 30% 被消除,而 70% 需要再次检查),我感到困惑的是数组的哪一部分可以是消除,即如果将数组可视化为高度为 5 和宽度为 n/5 的矩阵,那么消除的元素位于哪个象限?我最初认为它是两个对角相邻的象限,但现在我认为它只是一个象限,具体取决于中位数的中位数是多少(参见步骤 5、6 和 7 here)。
所以我去维基百科看看是否有一个比 CLRS 分析更少的快速解释(为了在我跳回 CLRS 进行分析之前理解算法)。我来到this,特别是“最后,选择“中位数的中位数”作为支点。”从维基百科中的描述来看,“选择”没有找到真正的中位数,而是一个足够中位数的元素,用于选择快速排序的枢轴。
那么“选择”在真正的中位数方面做了什么,它是如何做到的?通过所有这一切想到的短语是“部分层次结构”,据我所知,这就是“选择”起作用的原因,但是通过什么逻辑,您可以根据这个部分层次结构将列表中的元素从中间值中消除?
【问题讨论】:
-
BFPRT 基本上是快速选择,改进了枢轴选择。使用快速选择,您选择了一个枢轴不知何故,分区,然后在上半部分或下半部分递归调用。 BFPRT 通过在每个递归步骤使用中位数的中值作为枢轴来修改它。
标签: algorithm selection median clrs