常数 5 在中位数算法中从何而来



我一直在试图理解中位数算法中"5"的来源,但似乎找不到关于它是如何推导的以及为什么它是最优的简单描述。

例如,为什么说 7 不是一个可行的选择?

我能看到的 5 个项目的唯一优点是它在中间的每一侧都有 2 个项目,这使得对 5 个项目的排序成为不超过 3 个交换的简单情况。

选择 5 是因为它是递归求解为 O(n) 的最小值。 7 也可以,但往往更慢。

更具体地说:如果将输入分解为大小为 5 的块,则会得到以下重复:

T(n) ≤ T(n/5) + T(7n/10) + O(n)

这解为 O(n),因为功在每个级别上呈几何衰减。

如果我们使用大小为 3 的块,我们会得到

T(n) ≥ T(n/3) +

T(2n/3) + O(n)

它求解为 Ω(n log n)。

选择大小为 7 的块会给出

T(n) ≤ T(n/7) +

T(5n/7) + O(n)

这也求解为 O(n),因为功在几何上衰减。但是,big-O 项中的常量大于 5 种情况,因为排序和获取大小为 7 的 n/7 块的中位数比排序和获取大小为 5 的 n/5 块的中位数要多。因此,更常用五块的情况。

希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新