Algorithm 中位数是一个很好的例子

Algorithm 中位数是一个很好的例子,algorithm,median-of-medians,Algorithm,Median Of Medians,您好,我正在尝试了解中值算法是如何工作的。到目前为止,在我所看到的所有例子中,在算法开始执行之前,已经有被划分的数字组。所以我无法理解这些群体是如何形成的。更具体地说,在目前研究的示例中,有9组5个数字,例如aka 45个数字,或4组10个数字,总共aka 40个数字。那么,如果我们有n个数字呢。。?有没有什么好的方法可以让我找到它的组应该有多少元素?MoM是一种递归算法。对于像quicksort或quickselect这样的算法,它是一种合理的选择“轴心点”的方法。因此,它需要在一定的时间范围

您好,我正在尝试了解中值算法是如何工作的。到目前为止,在我所看到的所有例子中,在算法开始执行之前,已经有被划分的数字组。所以我无法理解这些群体是如何形成的。更具体地说,在目前研究的示例中,有9组5个数字,例如aka 45个数字,或4组10个数字,总共aka 40个数字。那么,如果我们有n个数字呢。。?有没有什么好的方法可以让我找到它的组应该有多少元素?

MoM是一种递归算法。对于像quicksort或quickselect这样的算法,它是一种合理的选择“轴心点”的方法。因此,它需要在一定的时间范围内运行

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

基本情况很清楚。如果一个列表中的元素少于五个,那么你会以一种天真的方式找到中间值

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

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


那么“五”应该有多大呢?事实证明,5是最理想的。有人在维基百科页面上展示了这个主题的复杂性分析。从本质上说,较大的“五”值可以更好地逼近中位数,但需要付出更多的努力才能找到“五”的中位数。不幸的是,3并没有在每次迭代中减少足够的搜索空间,因此不值得选择“5”。通常情况下,它需要是奇怪的,除非你想花费周期来分割元素之间的差异。

你能试着澄清目前研究的算法吗?另外,如果你能把例子等放在代码块中,这会很有帮助。你把整组数字分成五个一组,前五个数字将组成第一组,下五个数字将成为下一组等等,最后一组可能少于五个元素。组的大小始终为5,因此您以
n/5
n/5+1
组结束。@BlackPlanet我现在有点赶时间,所以我将在几个小时内编辑问题,以更具体@pepo我知道发布超链接不是一种好技术,但我不想复制网站的内容。这里的组数是三个,它应该适用于任何奇数大小的组(大于1 ofc)。这些组的目的是去除肯定低于或高于中间带中间带的元素。如果将组的大小设置为
2k+1
,则每个组中至少有
k
元素小于或
k
元素大于中间值的中值,这就为递归调用留下了
n(k+1)/(2k+1)
元素。