【问题标题】:Is my analysis for identifying the best sorting algorithm to solve this task correct?我对确定解决此任务的最佳排序算法的分析是否正确?
【发布时间】:2013-10-28 06:04:07
【问题描述】:

这是一个面试问题,我想知道我的分析是否正确:

“魔术选择”函数基本上会在大小为 n 的数组中生成“第 m 个”最小值。任务是使用高效算法按升序对“m”元素进行排序。我的分析是首先使用'magic select'函数来获取'mth'最小值。然后,我使用分区函数来创建一个枢轴,以获取左侧的所有较小元素。在那之后,我觉得桶排序应该有效地完成对左半部分排序的任务。

我只是想知道这是否是对“m”个最小元素进行排序的最佳方法。我也看到了在这里使用快速排序的可能性。但是,我认为避免基于比较的排序可能会导致 O(n)。基数排序或堆排序(O(nlogn))也可以用于此吗?如果我没有以最好的方式做到这一点,那可能是实现这一目标的最佳方式?数组是我被允许使用的数据结构。

非常感谢!

【问题讨论】:

  • 您能详细说明一下吗?预言机有多快?预言机每次都绕着同一个位置m旋转,还是可以控制?
  • 我不太确定我理解你所说的 oracle 是什么意思。但是,为这个问题添加更多内容:这是一个关于算法的问题。 'm' 可以是用户定义的,m 在 (0..n-1) 范围内,其中 n 是数组的大小。
  • 我使用“oracle”来指代您的“magic select”对象。你知道使用“魔术选择”对象的运行时间吗?
  • O(n) 用于“魔术选择”。非常感谢您花时间回复!

标签: algorithm sorting big-o asymptotic-complexity


【解决方案1】:

我敢肯定,在按排序顺序从数组中选择 k 个最低元素方面,您无法比任何标准算法做得更好。您的“魔法机器”的时间复杂度为 O(n),这与您从标准选择算法(如中位数算法或快速选择)获得的时间复杂度相同。

因此,您的方法似乎非常合理。我怀疑你可以渐近地做得更好。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2021-08-25
    • 2020-02-25
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多