计数查找算法的研究_第1页
计数查找算法的研究_第2页
计数查找算法的研究_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计数查找算法的研究        摘  要  查找第K大的元素的问题在机查找计数中占有很重要的地位。若直接进行排序,则算法平均时间复杂度为O(N*Lg(N)。但是比较好的策略有求第K大的元素的经典算法基于分治思想的Divide-Select 16,算法的时间复杂度为O(6.09*N ) 5。由于基于比较的排序算法在最坏的情况之下,都需要进行N*Lg(N)次比较3,故本文提出了一种基于非比较算法的无符号整数查找算法Count-Search(计数查找算法)。该算法应用于无符号整数的查找,算法的平均时

2、间复杂度为O( 2*N ) 。     关键字 非比较;查找;排序;时间复杂度;计数;整数  1  算法的基本思想    通常的排序算法在空间和时间复杂度一定的情况下的时间开销主要是关键字之间的比较和记录的移动。基于计数排序的查找算法(Count-Search)的实现在整个过程无需进行数据的比较,算法的时间复杂度为O( 2*N )。该算法的基本原理是:     根据无符号整数的大小可以和数组元素的下标对应的原则,在程序中可以用整数数组来储存元素的大小关系。对于一个大小为N的整型数组a,

3、对于每一个元素x,用数组中的元素ax记录下小于等于它的元素个数,当要找的是集合中第K个大的元素时,则只需找到该数组中第N-K+1小的元素。即只需要找到该数组中第一个大于或等于 N-K+1的元素,该元素的下标即为第K大的数。     该算法具体可以描述为:假设n个输入元素的每一个都是介于0到M之间的整数,此处M为某个无符号整数。     (1) 对于每一个输入的元素X,首先确定出等于X的元素个数。     (2) 对于每一个元素X,确定小于等于X的元素个数。     (3) 从

4、数组首地址出发顺序查找到第一个小于等于K的元素,则该元素X即为所要查找的第K小的数,顺序查找到第一个小于等于N-K+1的元素,则该元素X即为所要查找的第K大的数。 2  计数查找算法的C语言实现(CountSearch)2.1 数据结构的设计与程序    假定输入的数组为整型数组A1.N,lengthA=N,数组中元素最大值为M,数组C记录整数元素的大小关系。 Count-Search(int* A,int K) memest(C,0)/C0.M=0初始化C for j=1 to lengthA do CAj=CAj+1 /Ci包含等于i的元素个数 fo

5、r i=1 to M begin do Ci = Ci+Ci-1  /Ci包含小于等于i的元素个数 if( Ci>= N-K+1 )   break;/寻找到第N-K+1的元素,即为第K大的元素 end 2.2  算法步骤分析     第一步:第一行的初始化操作之后,在2-3行检查每一个输入元素。如果一个输入元素的值为i,即Ci的值加1 。于是在第3行之后,Ci中存放了等于i的元素个数(整数i=0,1,M)。     第二步:在第4-8之后,Ci存放了小于等于i的元素的个数。最后从数组C的

6、首地址出发顺序查找第一个使得Ci>=N-K+1的元素,则第K大的元素即为i 。     下图给出了Count-Search的运算过程:图1表示初始数组A,C。图2表示运行完程序2-3行,数组C中的元素Ci存放的是数组A中等于i的元素个数。图3表示运行4-8行的结果,C中元素Ci存放的是数组A中小于等于i的元素个数。例如查找该数组第3大的数,则由于C2=4>=3,故元素2即为所要查找的第3大的数。   2.3  时间复杂度分析     程序2-3行时间复杂度为O(N),第4-8行时间复杂度为O(M),该算

7、法的时间复杂度为T(n)= O( N+M)。如果数组A的最大值M与N成线形关系,即M=O(n),则其时间复杂度为T(n) = O( 2N)。 3  Count-Search算法与Divide-Select算法的比较    Divide-Select 的基本思想是:通过在线性的时间内找到一个划分基准,使得按这个基准所划分出的两个子数组的长度都至少为原数组的倍(0<<1是某个正常数),然后对子数组递归的调用Divide-Select算法,这样就可以在线性的时间内完成查找任务。6   1    &#

8、160;      该算法得时间复杂度为O(6.09*N)5,与Count-Search算法相比较可知:Count-Search算法具有更好的时间复杂度。 4  算法测试与比较    为了证实上述结论,在ACER TravelMate 2420 (PM730,512M内存,80G硬盘),Windows XP 平台上编写了三种查找算法的子程序,进行了相应的实验测定,其结果如表1 所示。(实验数据全部采用均分布的无符号整型随机数) 表1    数据规模2*1058*10

9、51062*1068*1061078*107快速排序的查找(qsort)632192655792203276662437Divide- Select311091403291157134711732Count-Search151631311872031344    注:以上时间单位为毫秒MS。     根据以上数据我们可以绘制出数据规模和时间的函数图像。     观察分析以上实验结果,可以看出:基于快速排序的查找算法和其他算法相比较具有较差的效率;而采用了分治策略的Divide- Select查找算法的效率

10、可以是基于快速排序的查找算法的几十倍,其时间复杂度在图中也反映为线性。而基于计数排序的查找算法(Count-Search)的时间复杂度同样达到了线性,但是效率却比Divide-Select更高,通过上述实验可以得知:在进行无符号整数查找时,基于计数排序的查找算法(Count-Search)在时间上是最优的。 5  Count-Search的应用范围    在查找无符号整数集合时,应用Count-Search算法,能够降低查找时间复杂度。但是应用Count-Search算法时要注意:该算法只适用于整数的查找,且查找集合S的最大值M与S中元素个数N不成指数关

11、系,即M不能远大于N。因为当M过大时,首先内存开销就会很大,其次时间复杂度也会相应的提高。     该算法充分的运用了整数的特性,整个运算过程中无需数据的比较和交换,大大降低了算法的时间复杂度,因此该算法可以在工程统计中得到大规模运用。例如:随着的和应用,网络中的信息量成倍的扩大,而在其中我们关注的最多的则是统计排名比较靠前的信息,如果将全部过亿的统计量排序,则由于数据量过大,则会浪费大量的时间和资源。而采用Count-Search的查找算法,就可在线性的时间完成。 6  结束语    本文中提出的一种基于计数排序算法的整数

12、查找算法,该算法在运算过程中无需进行数据的比较和交换,该算法可以应用到大规模的整数查找,算法的时间复杂度很低,而且避免的大量的数据比较和交换,同时在时间上是最优的。 1崔泽鹏,李伟生. EREW  PRAM模型上指数级分割待处理数据集的并行多选算法J.北方大学学报,2003,(2):46-49 2班志杰,高光来. 一种Byte查找第K个元素的算法研究J. 内蒙古大学学报,2004,(3):322-324 3Thomas H.Cormen  Charles E.Leiserson. 算法导论M. 北京:机械出版社。2006.9:98-99 4Muhammad H.Alsuwaiyel. 

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论