Medians中值算法的解释



Median of medians方法在quicksort类型的分区算法中非常流行,可以产生相当好的透视图,从而对阵列进行统一的分区。其逻辑在维基百科中给出为:

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

有人能为我解释清楚一点吗?我发现很难理解其中的逻辑。

想想下面的一组数字:

5 2 6 3 1

这些数字的中位数是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个数字+中值本身),这些数字小于m。因此,m至少比3n/10的数字大。

对于元件数量CCD_ 22的类似逻辑大于。