Neo's Blog

不抽象就无法深入思考
不还原就看不到本来面目!

0%

选择问题

选择问题

从n个元素的集合中选择第i个顺序统计量的问题形式化地归结为“选择问题”。

中位数和顺序统计量

1)顺序统计量:在一个由n个元素组成的集合中,第i个顺序统计量(order statistic)是该集合中的第i小的元素。如:在一个元素集合中,最小值是第1个顺序统计量(i=1);最大值是第n个顺序统计量(i=n)

2)中位数:对一个有n个元素的集合,将数据排序后,位置在最中间的数称为该集合的中位数。

最大值最小值

针对一个序列取得最大和最小值均需要n-1次比较。这是一个下限,确定最大值或者最小值的算法可以看作各个元素之间一场锦标赛,每次比较都是一场比赛,两个元素中较小的或者较大的获胜,除了最终的最大值和最小值,所有其他元素都需要输一次,所以n-1次是必须的。

接下来是一些比较有意思的问题,比如同时找出最小值和最大值,当然可以n-1次比较找出最大值,然后n-2次比较找出最小值,不过还是有比这个更好一点的算法,把元素两两分组,然后比较产生一个较大的值和较小的值,然后较大的值中产生最大值,较小的值中产生最小值,此时需要比较操作的次数至多3|_n/2_|。

最大与次大问题

还有一个比较问题是同时找出最大、第二大或者最次小元素的比较次数,简单的当然是2n-3,不过也有一个分组的方法能够达到$n+lgn-2$的比较次数。比较方法如下:

上面已经说明了,找出最值最少的比较次数n-1,所以上面寻找的方法也是n-1次,不信可以累计求和,不过这样求最值的过程中最值上来的时候有一条路径被记录,这条路径的长度为lgn,找出次大值或者次小值直接在这个路径上寻找就只需要lgn-1的比较次数。(但是这种算法不适用于存在重复元素的情况)

原理:锦标赛算法,分组,两两比较;次大值一定跟最大值PK过。

你的支持是我坚持的最大动力!