要查找数组的最大值和第4个最大值,所需的最小比较数是多少?我假设我必须使用类似于MinMax的算法,并在此处找到解决方案:
Find the 2nd largest element in an array with minimum number of comparisons \
但我不确定如何使锦标赛风格适应这种情况。
答案 0 :(得分:1)
有趣的问题......
我认为诀窍就是第二次参加比赛,但是从比赛中取出最大和第二大(由比赛#1决定)。
比赛#1:找到(1)[最大]和(2)[第2大]
锦标赛#2:从集合中删除(1)和(2)。在(3)[最大]和(4)[第2大]中找到。这些将是原始集合中的第3和第4大(
)[编辑]:为了完整,我最好尝试一些数学。
(1)+(2)+(3)+(4)
=> (n - 1)+(log n - 1)+((n - 2) - 1)+(log(n-2) - 1)
=> 2n +(log n)+(log(n-2)) - 6
=> 2n + log(n ^ 2 - 2n) - 6