这种Median of medians方法在quicksort类型划分算法中非常流行,可以产生相当好的支点,从而可以均匀地对数组进行划分。其逻辑在Wikipedia中为:
Median of medians
quicksort
所选的枢轴点小于或大于中值列表中元素的一半,每半个元素大约为n / 10个元素(1/2 *(n / 5))。这些元素中的每个元素的中位数均为5,使其小于该块之外的2个其他元素,并且大于2个其他元素。因此,枢轴在块外小于3(n / 10)个元素,并且在块外大于3(n / 10)个元素。因此,选择的中位数会将元素拆分为介于30%/ 70%和70%/ 30%之间的某个位置,从而确保算法的最坏情况线性行为。
有人可以为我做些清楚的解释。我发现很难理解逻辑。
考虑以下一组数字:
5 2 6 3 1
这些数字的中位数是3。现在,如果您有一个数字n,如果n > 3,则它至少大于上述数字的一半。如果为n < 3,则它至少小于上述数字的一半。
3
n
n > 3
n < 3
这就是想法。也就是说,对于每组5个数字,您将获得其中位数。现在您有了n / 5数字。这是显而易见的。
n / 5
现在,如果您获得这些数字的中位数(称为m),则它大于其中一半,而小于另一半(按中位数的定义!)。换句话说,m大于n / 10数字(它们本身是5个小元素组的中位数),并且大于另一个n / 10数字(再次是5个小元素组的中位数)。
m
n / 10
在上面的示例中,我们看到,如果中位数为k并且您具有m > k,那么m它也大于其他2个数字(它们本身都小于k)。这意味着,对于那些m比其中位数大的5个较小的元素组,每个元素组m也大于其他两个数。这使得在小于的n / 105个小元素组中的每一个中,至少有3个数字(2个数字+中位数本身)m。因此,m至少大于3n/10数字。
k
m > k
3n/10
元素数量的相似逻辑m大于。