期望为线性的选择算法
来源:互联网 发布:家有n多宝贝 淘宝 编辑:程序博客网 时间:2024/04/30 03:05
期望为线性的选择算法
平时,我们在做从一堆没有排序的数中,找出最大,或者最小,必须要做N-1次比较。
而当我们同时需要找出最大最小值时,我们只需要3|_n/2_|次比较。具体做法是:我们把所有的数分为两组,比较每一组并记录较大和较小的数值,把较大的放在一组找最大的,把较小的放在一组找最小的。
但我们在现实中会遇到很多找第i个最小或者最大的值的情况,在这种情况下,我们有更牛的算法,它的期望为线性时间。RANDSOMIZE-SELECT算法,它是以快速排序算法为模型的,与快速排序法不同的是:快速排序法需要递归的处理划分的两边的情况,而RANDSOMIZE-SELECT算法只需要递归的处理一边的情况。
算法如下:
RANDOMIZED-SELECT(A,p,r,i) if p = r then retrun A[p] q= RANDOMIZED-PARTITION(A,p,r) k= q-p+1 if i = k then return A[q] else if i<k return RANDOMIZED-SELECT(A,p,q-1,i) else return RANDOMIZED-SELECT(A,q+1,r,i-k) RANDOMIZED-PARTITION(A,p,r) i=RANDOM(p,r) exchange A[r],A[i] return PARTITION(A,p,r)PARTITION(A,p,r) x=A[r] i=p-1 for j=p to r-1 do if A[j]<=x i++ exchange A[i],A[j]//j是为了找比x小的数,而j后面的i是为了记录比x大的数,所以在遇到比x小的数时,就交换位置,完成小的在前,大的在后 exchange A[i+1],A[r]//最后把x和比大的数交换位置
return i+1
在PARTITION算法中,这个算法是快速排序算法的关键。而 RANDOMIZED-PARTITION中i的选取是随机的,在最坏的情况下,每次分割的位置元的位置都导致一边没有元素,这样就不能够达到线性了。
0 0
- 期望为线性的选择算法
- 期望为线性时间的选择算法
- 期望为线性时间的选择算法randomizedSelect
- Java 期望为线性时间的选择算法
- 期望时间为线性时间的选择算法(C++)
- CLRS 9.2期望为线性时间的选择算法
- 期望为线性时间的选择算法(c语言)
- 期望为线性时间选择算法
- 选择问题的线性期望时间算法
- 算法导论程序19-期望为线性时间的选择算法(Python)
- 小白进阶之期望为线性时间的选择算法
- 算法导论:第9章 中位数和顺序统计量_1期望为线性时间的选择算法
- 期待为线性时间的选择算法
- 算法之分治——期望线性时间的选择(基础版本的选择)
- 期望线性时间选择
- 算法--顺序统计-期望线性时间做选择
- 最坏情况为线性时间的选择算法
- CLRS 9.3最坏情况为线性时间的选择算法
- mysql语句汇总
- 重装系统操作步骤、批处理及注意事项
- cocos2d-x CCParticleSystem粒子系统
- 匈牙利命名法
- c++,java,php,c# 的网络字节流读写文件
- 期望为线性的选择算法
- QT中关于arg()函数
- 模板之型别对型别的映射
- UIButton和UILabel添加下划线
- cocos2d-x 坐标系
- 引用Modules时Node.js的搜寻规则
- POWER 6® 服务器 Firmware 升级相关的术语和概念
- 小细节大作为:提高iOS访问权限通过率有这几个办法
- hibernate联合主键的三种注解做法