算法导论第九章9.3.7----最接近中位数的k个数

转自:mosfet.isu.edu/classes/cs385f10/resources/Introduction%20to%20Algorithms(Instructor's%20Manual).pdf

(CLRS 9.3-7) 

Describe an O(n) algorithm that, given a set S of n distinct numbers
and a positive integer k ≤ n, determines the k numbers in S that are closest to the
median of S .


Solution: 

Note that the k numbers in S that are closest to the median are among the k smallest numbers on either side of the partition (around the median).

注意到数组中最接近中位数的k个数字是两边分区中最小的k个数。

We first use linear time selection to find the median. 

首先使用线性选择算法找到中位数。

Then we compute an array B of absolute differences between the ith element in S and the median, B[i] = |S [i] − median|.

之后计算数字B,该数组记录数组S中每个元素到中位数距离的绝对值。B[i] = |S [i] − median|.

The k elements closest to the median are the k smallest elements in B. 

最接近中位数的k个元素是B中最小的k个元素。

We use linear time selection to find the k-th smallest element in B. 

使用线性选择算法找到数组B中第k个最小元素。

The first k elements in the resulting partition of B correspond to the k numbers in S closest to the median. 

数组B经过选择算法处理后,在结果划分的前k个元素就对应数组S中距离中位数最近的k个数。

The algorithm takes O(n) time as we use linear time selection exactly two times and traverse the n numbers in S once.

使用两次线性时间选择算法找中位数和第k个数,一次遍历数组S中的n个数,该算法时间复杂度为O(n)。



1 get the median of S

2 compute the distence of S to the median, store in B

3 get the kth order statistics in B. the first k elements in partition of B is the output

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值