中位数中位数算法的解释

Sex*_*ast 12 algorithm quicksort median median-of-medians

Median of medians方法在quicksort类型分区算法中非常流行,以产生相当好的枢轴,从而统一分区数组.其逻辑在维基百科中给出:

所选择的枢轴小于和大于中位数列表中元素的一半,每半个元素大约为n/10个元素(1/2*(n/5)).这些元素中的每一个都是5的中值,使得它少于2个其他元素并且在块之外大于2个其他元素.因此,枢轴在块外部小于3(n/10)个元素,并且大于块外的另外3个(n/10)个元素.因此,所选择的中值将元素分成介于30%/ 70%和70%/ 30%之间的某个位置,这确保了算法的最坏情况线性行为.

有人可以为我清楚地解释一下.我发现很难理解逻辑.

Sha*_*baz 14

想想以下几组数字:

5 2 6 3 1
Run Code Online (Sandbox Code Playgroud)

这些数字的中位数是3.现在如果你有一个数字n,如果n > 3,那么它大于上面数字的至少一半.如果n < 3,则小于上述数字的至少一半.

所以这就是主意.也就是说,对于每组5个数字,你得到它们的中位数.现在你有了n / 5数字.这很明显.

现在,如果你得到这些数字的中位数(称之为m),它大于它们的一半而小于另一半(根据中位数的定义!).换句话说,m大于n / 10数字(它们本身是小5元素组的中位数)并且大于另一个n / 10数字(也是小5元素组的中位数).

在上面的例子中,我们看到如果中位数是k和你有m > k,那么m也大于2个其他数字(它们本身小于k).这意味着对于那些m比其中等大的小5个元素组中的每一个,m也比其他两个数字更大.这使得它们在每个n / 10小的5个元素组中至少有3个数字(2个数字+中位数本身),小于5 m.因此,m至少比3n/10数字更大.

元素数量的类似逻辑m大于.

  • 它平均不给'50-50`分区.它总是介于"30-70"和"70-30"之间(或许平均可以称之为"50-50"),但这不是重点.对于快速排序给出"O(nlogn)"时间复杂度,它需要能够将数组划分为与数组大小成比例的分区.这就是给出`logn`递归深度的原因.`30-70`除法已经给出了'3n/10`和`7n/10`除法,它与`n`成比例.因此即使它不是一个完美的`50-50`,它仍然会产生对数递归深度(除了它不是基数2中的`log`,而是基数`10/7`) (6认同)