算法导论 第九章 中位数和顺序统计量

中位数和顺序统计量

在一个由n个元素组成的集合中,第i个顺序统计量(order statistic)是该集合中第i小的元素。min是第一个,max是第n个。

9.1 最小值和最大值

MINIMUM(A)
    min=A[1]
    for i=2 to A.length
        if min>A[i]
        min=A[i]
    return min

可以同时找到最小值和最大值,首先将一对输入元素相互进行比较,然后把较小的与当前的最小值比较,把较大的与当前最大值进行比较,这样对每两个元素共需要3次比较。

9.2 期望为线性时间的选择算法

一般选择问题看起来要比找最小值这样的问题困难很多,但它们的渐进运行时间却都是O(n)。
RANDOMIZED-SELECT(A, p, r, i)
if p==r
return A[p]
q=RANDOMIZED-PARTITION(A, p, r)
k=q-p+1
if i==k //the pivot value is the answer
return A[q]
else if i

9.3 最坏情况为线性时间的选择算法

我们来看一个最坏情况运行时间为O(n)的选择算法。像RANDOMIZED-SELECT一样,SELECT算法通过对输入数组的递归划分来找出所需元素,但是在该算法中能够保证得到对数组的一个好的划分。SELECT使用的也是来自快速排序的确定性划分算法PARTITION,但做了修改,把划分的主元也作为输入参数。
通过执行下列步骤,算法SELECT可以确定一个有n>1个不同元素的输入数组中第i小的元素。
1. 将输入数组的n个元素划分为n/5组,每组5个元素,且至多只有一组由剩下的n mod 5个元素组成;
2. 寻找这n/5组中每一组的中位数:首先对每组元素进行插入排序,然后确定每组有序元素的中位数;
3. 对第2步中找出的n/5个中位数,递归调用SELECT以找出其中位数x(如果有偶数个中位数,为了方便,约定x是较小的中位数);
4. 利用修改过的PARTITION版本,按照中位数的中位数x对输入数组进行划分。让k比划分的低区中的元素数目多1,因此x是第k小的元素,并且有n-k个元素在划分的高区;
5. 如果i=k,则返回x。如果i

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值