algorithm - 中位数的中位数大例子

标签 algorithm median-of-medians

您好,我想了解中位数算法的工作原理。到目前为止,在我看到的所有示例中,在算法开始执行之前,已经有数字组 divided 。所以我无法理解这些群体是如何形成的。到目前为止所研究的示例更具体地说,有 9 组,每组 5 个数字,例如 45 个数字,或者 4 组 10 个数字,也就是 40 个数字。那么如果我们有 n 个数字呢?我应该遵循什么好的技术来找到它的组应该有的元素数量?

最佳答案

MoM 是一种递归算法。它作为一种为快速排序或快速选择等算法选择“枢轴”的合理方法而存在。因此,它需要在一定的时间范围内运行。

如果解释为基本情况和递归情况可能更容易理解。

基本情况很清楚。如果您的列表中的元素少于五个,那么您会以天真的方式找到中位数。

但是,如果您的列表至少有五个元素,您可以应用递归的情况。您将从您的大列表中取出连续的五个元素组,找到它们的中值,并将其添加到一个较小的列表中。 (如果还有剩余,可以忽略。)

如果这个新的、更小的列表足够小,您可以应用基本案例,如上所述。否则,您将通过“小”列表创建另一个更小的列表。起泡、冲洗并重复,直到剩下的元素少于五种。这就是你对整体中位数的估计。所以它适用于任何大小的列表。

那么“五”应该有多大呢?好吧,事实证明 5 是最优的。有人在该主题的维基百科页面上展示了复杂性分析。本质上,较大的“五”值可以让您以更多的工作为代价找到中位数的更好的中位数来找到“五”的中位数。不幸的是,3 并没有将每次迭代的搜索空间减少到足以成为“5”的一个有值(value)的选择。而且它通常需要是奇数,除非您想花费周期来拆分元素之间的差异。

关于algorithm - 中位数的中位数大例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21412859/

相关文章:

python - 使用中位数的中位数查找第 k 个最大元素的复杂性

java - 不了解中位数算法的中位数来查找第 k 个元素

algorithm - 有人知道 OLAP Internals 吗?

asp.net - ASP.Net 使用什么缓存算法?

algorithm - Clog n的一个算法问题的设计[C++代码]

java - 快速排序和中值实现的堆栈溢出错误

c++ - 理解代码的中位数

c - 以最有效的方式逐行阅读*平台特定*

algorithm - TCP/IP 高效数据包过滤

c - 在 C 中确定性地生成强力排列