作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在努力理解 the Median of Medians algorithm 中“5”的来源,但似乎找不到关于它是如何推导出来的以及为什么它是最佳的简单描述。
例如,为什么说 7 不是一个可行的选择?
我能看到 5 的唯一优势是它在中间的每一侧都有 2 个项目,这使得对 5 个项目进行排序成为不超过 3 个交换的简单情况。
最佳答案
选择 5 是因为它是递归求解为 O(n) 的最小值。 7 也可以工作,但速度往往较慢。
更具体地说:如果将输入分成大小为 5 的 block ,则会重复出现:
T(n) ≤ T(n/5) + T(7n/10) + O(n)
这解决了 O(n),因为工作在每个级别上呈几何衰减。
如果我们使用大小为 3 的 block ,我们得到
T(n) ≥ T(n/3) + T(2n/3) + O(n)
求解为 Ω(n log n)。
选择大小为 7 的 block 给出
T(n) ≤ T(n / 7) + T(5n / 7) + O(n)
这也解决了 O(n),因为工作呈几何衰减。但是,大 O 项中的常数大于 5 情况下的常数,因为排序和取 n/7 个大小为 7 的 block 的中值比排序和取 n/5 个大小为 5 的 block 的中值更费力。因此, 五 block 的情况更常用。
希望这对您有所帮助!
关于algorithm - 中位数算法中常数 5 从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19698347/
我是一名优秀的程序员,十分优秀!