当前位置: 首页 > 专利查询>陈启星专利>正文

通过计算实现分级定位的排序和查找的方法技术

技术编号:2880743 阅读:167 留言:0更新日期:2012-04-11 18:40
一种通过计算实现分级定位的排序和查找的方法,将一组无序的关键字排列成有序的关键字,预设定一组可以通过计算得到i和k而唯一确定的带有数组B(i)的变量,作为存储不同级别数据的单元,设有n个数A(1).Key…A(j).Key…A(n).Key待排序,每当取出一个数A(j).Key,都可以通过分级函数计算,得出F(A(j).Key)=i;由此可以确定A(j).Key应该划分到等级B(i)之中;依次将每个数按关键字划分到该去的级别后,待排序的n个数已根据关键字大小分为m个级别。(*该技术在2021年保护过期,可自由使用*)

【技术实现步骤摘要】
一种计算机对于一组完全无序的数据进行排序和一组有序的数据进行查找的方法。对于完全无序的一组数进行排序,理想化的方法就是对于待排序的n个数,每取出一个数通过计算后,马上能准确找到其所应该排在的位置,当n个数全部经过一趟计算后,全部找到其所应该排在的位置,这样就完成了排序。虽然。理想排序应该只要进行n次操作,其时间复杂度为O(n),并且应该有n个变量存放待排序数据,即辅助空间为O(n)。目前,对于完全无序的数据进行排序的方法,时间复杂度较好的有快速排序、堆排序、希尔排序、基数排序和归并排序5种,其中快速排序、堆排序、希尔排序和归并排序的时间复杂度为O(n*logn),而且前三种是不稳定排序;基数排序的时间复杂度为O(d*n),其中d为关键字的个数。本专利技术的目的是要提供一种效率高且稳定的排序方法,使对于完全无序的数据进行排序,其时间复杂度降低至接近O(n),即接近理想化的排序。查找也是要通过计算,首先直接在n个数中确定一个很小的查找范围,以利于提高查找速度。本专利技术是一种通过计算实现分级定位的排序和查找的方法,以下简称为分级排序和查找,排序是将一组无序的关键字key排列成有序的关键字,查找是在关键字已经排序成有序的一组关键字中找到要找的某个关键字,本专利技术的特征是将排序分为两个过程,首先完成分级,然后进行级内排序和数据收集,完成完全排序。设有n个数A(1).Key…A(j).Key…A(n).key待排序,第一个过程是按照关键字大小分为m个级别,有以下步骤①设定一组可以通过计算得到i和k而唯一确定的变量,如数组类型的变量B(i,k)和层次记录数组类型变量B(i),简称为可分级变量,其中的下标i用于表示级别大小,简称为分级变量,如果希望将n个数A(1).Key…A(j).Key…A(n).Key的关键字key按大小分为m个等级,那么就设定分级变量为m个,即i=1…m。为叙述方便起见,以记录数组类型变量B(i)展开说明。B(i)中的域C(k)是一个数组变量,是用于存放关键字的变量,其中的下标k是用于统计放入i级变量B(i)中的关键字个数的计数器,称为计数变量,(k=1…&,&表示结束字所对应的序号)。将关键字分级的方法很多,可以按各种分布函数分级,如正态分布函数、指数分布函数、t分布函数、F分布函数、x2分布函数、泊松分布函数、均匀分布函数;②计算出待排序关键字中的p个最大关键字keyMAX、MAX1、MAX2…MAXp、和q个最小关键字keyMIN、MIN1、MIN2…MINq;③计算出关键字的最大值和最小值后,包含在此范围内的字可视为关键字,在此范围以外的字可视为结束字END,比如MAX+1或MIN-1;首先用结束字对所有的可分级变量赋初值,令B(i).C(1)=MAX+1,(i=1…m)。④根据最大关键字和最小关键字以及待排序个数n,设计出分级函数F(A(j).Key),分级函数为F(A(j).Key)=1+int((m-1)*G(A(j).Key)),其中G(A(j).Key)表示各种分布函数。每当取出一个数A(j).Key,都可以通过分级函数计算,得出F(A(j).Key)=i;并且由分级函数F(A(j).Key)得知,i的值为1..m的正整数,由此可以确定A(j).Key应该划分到等级B(i)之中。依次将每个数按关键字划分到该去的级别后,待排序的n个数已根据关键字大小分为m个级别,即在MIN~MAX之间分为m个级别。⑤分级中,比较有利的情况是,每个级别的B(i)中刚好放入一个数,实际上可能不会这么凑巧,所以要完成分级还要解决以下问题1、某些级别要放入多个关键字怎么办?2、某些级别没有关键字(简称为空级别)怎么办?为此,特地在可分级变量B(i)中设计一个域为数组C(k),存放B(i)中的多个变量,k作为该级别关键字的计数器。为了识别B(i).C(k)中的关键字和无效关键字,特地在每个级别的最后一个关键字后面设置一个结束字。例如在等级B(6)中,其初值B(6).(1)=MAX+1,当放入一个关键字key1后,令B(6).C(1)=key1,k=k+1,B(6).C(k)=B(6).C(2)=MAX+1;同样,再放入一个关键字key2后,令B(6).C(k)=B(6).C(2)=key2,k=k+1,B(6).C(k)=B(6).C(3)=MAX+1;于是关键字可分别放入B(6).C(1)、B(6).C(2)中,加上一个结束字B(6).C(3)=MAX+1,B(6)级别中共存放2个带关键字的数据和一个结束字;另一种情况,经分级函数计算后,某些级别中可能没有关键字,那么这些级别的排序关键字还是等于赋初值时的情况,等于结束字,即令B(i).C(1)=MAX+1。为了便于以后的查找工作,应该保存分级排序时用到的分级函数F(A(j).Key)和可分级变量B(i)(k)这些信息,当需要进行查找时,可以根据分级函数计算,得出F(A(j).Key)=i;直接确定要查找的关键字级别,提高查找速度。这里以均匀分布函数为例分为m个级别,先算出关键字的MAX和MIN并做两件事,1、令B(i).C(1)=MAX+1,(i=1…m),对所有级别赋初值;2、确定了关键字的范围为MAX-MIN;按照均匀分布函数分级,意思是将关键字范围(MAX-MIN)划分为m等份,按均布方式设计的分级函数为 F(A(j).Key)=1+int((m-1)*(A(j).Key-MIN)/(MAX-MIN))=i,则每取出一个数A(j).Key(j=1…n),可以通过分级函数计算出对应的i,即确定了A(j).Key所对应的B(i).C(k)的分级变量,确定A(j).Key所应该在的等级为i,(i=1…m),于是令B(i).C(k)=A(j).Key,且k=k+1,B(i).C(k)=MAX+1。于是,A(1).Key…A(j).Key…A(n).Key就按照大小被划分为m个等级,实现了分级。分级后,在同一个级别中的关键字可能是无序的,但是,在级与级之间是有序的,比如说一组升序排列的分级关键字,前级的任一关键字都会小于后级的任一关键字。第二个过程是完全排序,有以下步骤①对所有存在多个关键字的级别,需要进行级内排序。如果关键字量不大,可以采用传统方法(如冒泡排序和归并排序)排序,如果关键字量大,可以再使用分级。②关键字收集工作,设计一组数组变量D(1)…D(j)…D(n)用于关键字收集,搜索范围是B(i).C(k-1),(i=1…m,k=1…&,&表示结束字所对应的序号),对于每一级可分级变量B(i).C(k),遇到关键字就收集到D(j)中,遇到结束字就令i=i+1,跳转到下一级进行收集。因为每个级别都有结束字,所以在收集时避免了产生多余信息和漏掉信息;遍历B(i).C(k-1),(i=1…m,k=1…&)后,A(1).Key…A(j).Key…A(n).Key就按照关键字大小存放于D(1)…D(j)…D(n)之中。从以上分级排序方法可知,排序时间由三部分构成,1、分级时间;2、级内排序时间;3、关键字收集时间。分级时间取决于待排序关键字的个数n和分级函数的复杂度,而本文档来自技高网...

【技术保护点】
一种通过计算实现分级定位的排序和查找的方法,以下简称为分级排序和查找,排序是将一组无序的关键字排列成有序的关键字,查找是在关键字已经排序成有序的一组关键字中找到要找的某个关键字,本专利技术的特征是:将排序分为两个过程,首先完成分级,然后进行级内排序和数据收集,完成完全排序;预设定一组可以通过计算得到i和k而唯一确定的带有数组B(i)的变量,作为存储不同级别数据的单元,设有n个数A(1).Key…A(j).Key…A(n).Key待排序,每当取出一个数A(j).Key,都可以通 过分级函数计算,得出F(A(j).Key)=i;由此可以确定A(j).Key应该划分到等级B(i)之中;依次将每个数按关键字划分到该去的级别后,待排序的n个数已根据关键字大小分为m个级别。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈启星
申请(专利权)人:陈启星
类型:发明
国别省市:43[中国|湖南]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1