算法导论——lec 09 中位数和顺序统计学

本文深入探讨了如何在线性时间复杂度内找到数组中的中位数和顺序统计量。讲解了Randomized-Select算法的期望线性时间性能,以及保证最坏情况仍为线性的Select算法。通过对数组进行分治和良好的划分策略,这两种算法能够在平均和最坏情况下实现线性时间选择。

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

一、 最大值和最小值问题

1、 找到最大值和最小值的程序

Minimum(A)
1 min<--A[1]
2 for i<--2 to length[A]
3 	do if A[i] < min
4 		then min <-- A[i]
5 return min
将以上的比较看做一次锦标赛,除了最终获胜者以外,每个元素至少输掉了一场比赛,因此,为了确定最小(大)值,至少要进行n-1次比较。
2、 同时找出最大值和最小值:可以按照上面的程序,多一次比较,总共比较2n-2次。这是 渐近最优的(n)。

3、 事实上至多进行3*floor(n/2)次比较就可以确定最大值和最小值:将一对元素进行比较,将其中较大的与最大值作比较,较小的与最小值作比较。

二、 以期望线性时间做选择

1、 一般选择问题:找出数组中第i大的元素。看起来比找最小值要复杂,但实际上两种问题的渐进运行时间相同,都是Θ(n)。

2、 Randomized-Select算法:

a、 采用分治法,以quick-sort为模型;

b、 区别在于只处理划分的一边;

c、 期望时间为Θ(n)。

Randomized-Select(A, p, r, i)
1 if p = r
2 	then return A[p]
3 q = randomized-partition(A, p, r)
4 k <-- q - p + 1
5 if i = k
6 	then return A[k]
7 else if i < k
8 	then return Randomized-Select(A, p, q-1, i)
9 else
10	return Randomized-Select(A, q+1, r, i-k)
算法分析:a、 Randomized-Select算法的最坏情况运行时间为Θ(n^2);即使是用它来寻找最大值和最小值最坏情况运行时间也是Θ(n^2)。

    b、 算法的平均情况性能较好:Θ(n);<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值