给出5个数字,找到中位数所需的最小比较数是多少?

时间:2009-10-18 19:03:13

标签: algorithm compare median minimum

如何设置最低比较次数?

2 个答案:

答案 0 :(得分:6)

引用Donald Knuth(通过维基百科的方式,因为我目前没有TAOCP的副本),比较次数的下限为6:

http://en.wikipedia.org/wiki/Selection_algorithm(向下滚动到标题为“下限”的部分)。

你的目标实际上是找到k个最低值,其中k是列表大小的一半,向上舍入,(因此,k = 3; n = 5),然后取最大值。将其插入到页面上的公式中,您将得到:

(5 - 3) + 1 + 1 + 2 = 6

在这种情况下,the actual minimum number of required comparisons is also six

如果您怀疑找到中位数的任务与找到k个最低值一样困难,您可以参考Knuth的TAoCP,第3卷,第5.3.3章后的练习#2。

答案 1 :(得分:3)

Donald Knuth的计算机程序设计艺术第3卷中有很多材料,在第5.3.3节,最小比较选择中,考虑选择 t 最大 n 值所需的最小比较次数的一般性问题。 (此值由 V t (n)表示。

Knuth为 V t (n)给出了 n - t +(t-1)⌈lg(n + 2 - t)⌉的上界),首先通过锦标赛系统确定 n - t + 2 的最大元素,删除它(因为它不能是 t 最大)并将其替换为其余元素之一,继续此过程直到所有元素都成为此过程的一部分,然后此阶段的最大元素是 t 原始集合中的最大元素。在这种情况下, n = 5 t = 3 ,因此该公式给出的上限是6次比较。

Knuth提到当n≤6时,此上限是精确的,因此在这种情况下适用。一般来说,我的理解是没有找到用于选择(和排序)的最小比较算法的一般程序,并且用于增加 n 值的记录通常使用通常不适用于当 n 增加时,更大的值或被其他技巧轻易击败。