我正在尝试了解Select algorithm,我遇到a good pivot VS a bad pivot
。我可以看到该算法使用Partition
算法来分离右边的较大元素
枢轴,以及枢轴左侧的较小元素。
bad pivot
是什么意思? bad pivot
如何将总运行时间投入O(n^2)
? 谢谢
答案 0 :(得分:4)
如果选择算法可以在每一步丢弃阵列的大块,那么选择算法将会很快。一个好的枢轴是对于“很多”的某些定义导致算法丢弃“很多”数组元素的枢轴。一个坏的数据透视表是算法丢弃该数组的非常标题的数据。
在最坏的情况下,pivot可能是数组中最大或最小的元素。如果发生这种情况,那么算法将以一组值为空的方式对元素进行分区,因为没有元素小于枢轴或没有大于枢轴的元素。该分区步骤需要时间O(n),并且必须运行O(n)次,因为每次迭代将数组的大小减小一。这会将算法运行时降级为O(n 2 )。有趣的是,这也是快速排序退化到时间O(n 2 )的方法。
希望这有帮助!