算法导论 第9章 中位数和顺序统计学(线性时间选择算法)

在一个由n个元素组成的集合中,第 i 个顺序统计量就是该集合中第 i 小的元素。要查询一个集合中第 i 小的元素,可以先对集合排序,然后取目标元素,这样可以再O(nlgn)的时间内解决。但是这种先排序的算法时间复杂度比较高,实际上,这是可以在O(n)时间内完成的。


9.1、查找n个元素的集合中的最大值和最小值均需要O(n)的时间,因为需要至少n-1次比较。如果需要同时找出最大值和最小值,可以这样做,每两个元素做一次比较,将较大者与最大值比较,较小者与最小值比较,这样就是两个元素需要三次比较,共需要3n/2次比较,所以时间复杂度也是O(n)。


习题 9.1-1 

先两两比较,较小的组成新的数组再两两比较,不断如此,从而形成一个倒立的树,最终找出最小的元素,因为最上一层是n/2次比较,这又可以看做一个满二叉树,所以总的比较次数为n/2+n/2-1=n-1,找出一个最小的元素需要n-1次比较,而n个元素中的第2小元素一定跟最小的元素比较过,在这个倒立书中,共有lgn个元素跟最小元素比较过,所以找到第2小元素需要lgn-1次比较,共所以需要n+lgn-2次比较。


习题 9.1-2

先两两比较n/2次得到较大值组n/2个元素,和较小值组n/2个元素,然后较大值组找出最大值需要 n/2-1 次比较,较小值组找出最小值需要 n/2-1 次比较,所以找出最大值和最小值,最坏情况下需要3n/2-2次比较。


9.2、要在线性时间内找到n个元素的集合的第 i 个顺序统计量,其要点就是使用类似快速排序的划分来不断缩小查找的空间,在快速排序中,对集合元素进行一次划分之后,就知道划分主元所在的顺序位置(即主元是属于第几小的元素),然后根据我们的目标元素的位置,从而选择划分主元的左右区间的一个作为下一个的划分区间,不断划分,直到划分主元即为目标元素为止。因此,可以使用快速排序中的随机化划分方法,利用随机化方法找到划分主元,这样就可以保证在平均情况下,每次的划分区间缩小一半,从而在O(n)的时间内找到第 i 个顺序统计量,因此这种随机化方法是在期望时间为O(n)的时间内完成,最坏情况依然是O(n^2)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值