【问题标题】:Difference between Quickselect & Binary Search Selection快速选择和二分搜索选择之间的区别
【发布时间】:2012-06-07 10:49:42
【问题描述】:

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

这是我坚持的场景。

对于一个值数组,您想在其中找到第 k 个最小的元素,如果它未排序,您可以使用 quickselect,如果它已排序,则使用二分查找。

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

这听起来与二分搜索的工作方式非常相似,那么为什么快速选择适用于未排序的值而二分搜索不适用,并且不是快速选择算法中的所有比较(计算出低点和高点) 花费很多……成本?

【问题讨论】:

  • 快速选择是 O(n),而 Binarysearch 是 O(logn)。但是第一个可以在任何列表上工作,而后者需要一个排序的列表。关于为什么快速选择可以处理未排序的列表,我相信您在第 4 段中自己解释过。那么,你的问题究竟是什么?

标签: algorithm select binary-search


【解决方案1】:

二分查找不能确定第 k 个最小的元素:它不是一种选择算法。二进制搜索确定您作为输入提供的值是否在数组中。

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

回顾一下:例如,使用快速选择,您可以确定数组中的第 8 个最小元素,而使用二分查找,您可以搜索值 15 的元素是否在数组中。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多