算法导论学习笔记-第9章 中位数和顺序统计学

本文介绍了如何使用分治算法在平均线性时间内找到第i小的元素,即顺序统计量,包括最小值和最大值的查找,以期望线性时间进行选择的RANDOMIZED-SELECT算法及其改进版本SELECT算法,后者可在最坏情况下实现线性时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

9.1 最小值和最大值

找最小值:依次查看集合中的每个元素,并记录比较过程中的最小元素。

同时找出最小值和最大值:先将一对输入元素互相比较,然后把较小者与当前最小值比较,把较大者与当前最大值比较,因此每两个元素需要3次比较,总的比较次数为3[n/2]。

9.2 以期望线性时间做选择

分治算法RANDOMIZED-SELECT:以快速排序算法为模型,对输入数组进行递归划分。和快速排序不同的是,快速排序会递归处理划分的两边,而RANDOMIZED-SELECT只处理划分的一边。

 

C代码:

 

最坏情况运行时间为θ(n^2),平均情况为O(n)。

 

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

选择算法SELECT,最坏情况运行时间为O(n)。该算法的基本思想是在RANDOMIZED-SELECT基础上,保证每次对数组的划分都是个好的划分。

执行步骤:

1)将输入数组的n个元素划分为n/5组,每组5个元素,且至多只有一个组由剩下的n mod 5个元素组成。

2)寻找n/5个组中每一个组的中位数。

3)对第2步中找出的n/5个中位数,递归调用SELECT以找出其中位数x。

4)按中位数x对输入数组进行划分。

 

该算法也被称为 Median of Medians algorithm。当按照该算法找出中位数的中位数x后,可以保证至少有30%个元素小于x,有30%个元素大于等于x。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值