Quickselect与&之间的区别二进制搜索选择

时间:2012-06-02 14:28:03

标签: algorithm select binary-search

我在理解一些更先进的排序,选择,搜索等算法方面取得了一些很好的突破。

然而,这是我坚持的情景。

对于要在其中找到第k个最小元素的值数组,您可以使用quickselect(如果它未排序)和二进制搜索(如果它已排序)。

如果我理解正确,通过数据透视/分区系统,quickselect将通过选择一个数据集来搜索未排序的数据集,通过将每个元素与数据透视表进行比较来创建低点和高点组,然后递归地将列表分解为子列表通过改变支点。

这听起来与二进制搜索的工作原理非常相似,那么为什么quickselect对未排序的值起作用而二进制搜索不起作用,并且不能在quickselect算法中进行全部比较(以计算出低点和高点) )需要花费很多...费用?

1 个答案:

答案 0 :(得分:12)

二进制搜索不确定 k - 最小元素:它不是选择算法。二进制搜索确定您作为输入提供的值是否在数组中。

选择算法确定 k - 最小元素。如果数组已经排序,就像二进制搜索一样,那么选择 k - 最小元素可以在 O(1)中完成,只需使用 k 作为数组的索引。

回顾一下:使用quickselect,您可以确定例如数组中第8个最小的元素,而使用二进制搜索,您可以搜索值为15的元素是否在数组中。

快速选择可以在预期的 O(n)时间内选择任意顺序统计数据;二进制搜索可以在 O(log n)时间内搜索元素,但需要对数组进行排序,否则算法将不正确。正如我告诉你的那样,在排序数组中选择 k - 最小元素是微不足道的,需要 O(1)时间来访问 k 排序数组中的第_个元素。

最后,在未对数组进行排序时搜索元素(给定值)需要在最坏的情况下 O(n)时间,因为您需要对数组执行线性扫描。 / p>