线性时间选择算法
找出的基准x至少比3(n-5)/10个元素大,因为在每一组中有2个元素小于本组的中位数,中位数处于1/2*[n/5-1],即n/5个中位数中又有(n-5)/10个小于基准x。同理,基准x也至少比3(n-5)/10个元素小。而当n≥75时,3(n-5)/10≥n/4所以按此基准划分所得的2个子数组的长度都至少缩短1/4。
这个其实比较容易理解:
数组中共n个元素,5个元素一组,一共分成约m=n/5组。每组中间大小的那个数不妨称其为“次中位数”。
在m=n/5个“次中位数”中再取出中间值,这就是整个数组的“中位数”X。
很显然,约有一半的“次中位数”比X还要小【(n-5)/10<m/2】
在这些组中,每组起码要有3个元素(连“次中位数”也算上)比X小,
所以整个数组中起码要有3(n-5)/10个元素比X小。
当n≥75时3(n-5)/10≥n/4,也就是说起码有1/4的元素比X小。
同理,起码也有1/4的元素比X还要大。
这样就保证了这个中位数的选择比较合理,划分之后最长的数组也不会超过原来的3/4,总体划分比较均匀
假设你们年级有10个班,每个班只有5个人。
某次考试中,你在你们班考了第三名(次中位数)。
将每个班的第三名放在一起比较,你在这十个人中排第5名(中位数)。
那岂不是说,整个年级中至少有15个人成绩比你还要低?
相关推荐
3)分析线性时间选择算法的计算效率。 题目给定了一个包含n个元素的一维线性序列a[0:14]={2,9,11,3,14,7,10,8,15,4,13,1,6,5,12},想要我们求第k小的元素。 注意看,a[0:14]是一个未排序好的数组!那么想要求第k小...
线性时间选择问题,采用不生成随机数的算法
关于线性时间选择算法的代码,使用的是C++语言。
线性时间选择算法的C++实现 g++下编译通过
算法之线性时间选择 文档包括详细的算法分析与代码示例
线性时间选择,中位数算法,利用按每5个元素分组,分别找出其中位数,再递归找出
线性时间选择 算法设计与分析,是实验程序……
可用的最坏情况下的线性时间选择算法的C++代码
在快速排序算法基础上,进一步完成线性时间选择算法,并且用不同数据量进行实验对比分析,要求分析算法的时间复杂性并且形成分析报告
本科算法实验-线性时间选择【数据+代码+说明+流程图+测试用例】
分治策略 线性时间选择 分治策略 线性时间选择
分治法实现线性时间选择,算法设计与分析课本代码修改
用C++实现的线性时间选择算法,并包含大量的注释,对理解程序很有帮助
算法分析与设计,,,,,,线性时间选择问题实验报告
排序算法的讲述。有关线性排序算法的讲述。
C语言实现的线性时间选择,该算法效率在最坏情形时也较高。
主要介绍了Java基于分治算法实现的线性时间选择操作,涉及java排序、比较、计算等相关操作技巧,需要的朋友可以参考下
可以运行的查找第K小元素的实现代码。并且实现了多个元素相同的算法。与王晓东的《算法》配套