哈希插入排序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈希插入排序   摘要:排序是软件领域的基本问题,常用排序算法中,快速排序算法最快,时间复杂度为O(n*lnn)。基数排序算法的时间复杂度可以达到O(g(n+mg))。并且只适合于像整数、字符串这类有明显结构特征的数据。我们在本文中提出一种新型的排序算法――哈希插入排序。它将哈希算法用于排序中。通过概率统计分析,证明它的时间复杂度为O(n),大大优于基数排序。   关键词:排序;哈希;字符串数据结构;文本数据库   中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)01-0105-02   排序理论中存在一个基本原则:将一个大的数据集划分成许多小数据集将大大提高排序的效率。采用这一原则的算法被称为划分―归并排序算法,快速排序和归并排序是其中两种。然而,这两种算法需要许多步递归过程将一个大数据集划分成许多只包含一个数据的小数据集。在划分完成之后,归并排序还需要进行递归的归并,这都降低了排序的效率。   直接基数排序算法是另外一种划分-归并排序算法。直接基数排序算法使用2g个桶来划分有序队列。首先使用最高g位(ib-1ib-2 … ib-g)关键字,根据这g位关键字将数据放到各个桶中,这g位关键字具有相同值的数据被放到一个桶中。同样的,第二趟中,每个桶中的数据根据接下来的g位(ib-(g + 1)ib-(g+2)…ib-2g)关键字进行划分,每个桶中的数据被分到m个新的子桶中,后面的几趟也是这样进行。这样,数据一直没有离开它被分配到的桶。一个显著的问题是桶(子桶)的数量将会迅速爆炸,很多桶中只有很少的数据[4] 。直接基数排序算法的时间复杂度是O(g(n+mg))。   三路基数快速排序是另外一种基于这一原则的排序算法。同快速排序算法一样,它将数据分为三部分:大于,小于和等于给定值。同基数排序相似,当前输入等于初始的字符,移到下一位字符。 [6]   这些算法都需要许多步来完成把一个大数据集分成许多小数据集的工作。那么是否可以找到一种算法,使得这一过程可以一步完成?哈希函数可以做到这一点。   在计算机领域中,排序和哈希是两种完全不同的概念。原因在于,一个数据在有序表中的位置不仅仅由它的关键字的值决定,也受这个数据集的上下文环境影响。哈希函数只考虑使用关键字的值来组织哈希表,所以寻找一个哈希值,使数据在有序表中位置的哈希函数是几乎不可能的。即使存在,它也很复杂,效率很低。然而,我们发现哈希是一种很好的划分方法。冲突是哈希中的一种重要概念,降低冲突是设计哈希函数所需要重点考虑的因素。但从另一方面,两个数据的哈希值冲突,说明这两个数据被分到一个组中,这样划分就只需要一步来完成。   在本文中,我们将给出一种新的排序算法,它使用哈希的方式,将大数据集分为许多小数据集。使用插入排序对每个小数据集进行排序。在第1节中给出一些作为该算法基础的定义,在第2节中给出算法描述,在第3节中给出算法的性能分析,在第4节中给出针对冗余编码的关键字的改进。   1 定义   定义1(完美哈希函数):一个哈希函数是完美哈希函数,当且仅当这个哈希函数能够给每一个数据一个唯一的哈希值。[1]   定义2(超级哈希函数):一个哈希函数是一个超级哈希函数,当且仅当它的结果是一个全序关系,并且是一个完美哈希函数。[1]   William F. Gilreath提出文献[1]一种超级哈希函数,但这类哈希函数比较复杂,而且不容易找到。这是由于数据在有序线性表中的位置不仅仅由它的关键字的值决定,还取决于其他数据的关键字的值,即它所处的上下文环境。但这里可以找到一种弱化要求的哈希函数,这就是下面定义的划分哈希函数。   定义3 (划分哈希函数)   划分哈希函数的结果是一个偏序关系,即,将具有相同哈希值的数据视为一个集合,那么一个集合中的数据将都大于或者等于(小于或者等于)另一个集合中的数据。   最简单的划分哈希函数就是使用前k位关键字的值作为哈希值,将所有数据分到2k个子线性表中。进行这次划分操作只需要对每个数据进行一次操作,这大大优于快速排序算法。   2 数据结构和算法   下面考虑哈希插入排序算法,首先考虑非冗余关键字。该算法首先是使用使划分哈希函数将整个线性表分为许多小的线性表。这里我们采用最简单的划分哈希函数,即使用关键字的前k位的值作为哈希值,将数据分到2k个子线性表中。这些子线性表的顺序由划分哈希函数确定。即,子线性表A在子线性表B之前,当且仅当子线性表A中的所有数据的关键字的值都大于子线性表B中所有数据的关键字的值。在将一个数据放到一个子线性表中时,按照插入排序的插入操作的方式进行。由于同一个字线性表中所有数据的开头k个字符的值都相同,所以当一个数据的关键字长度小于或者等于k时,直接将其放在队

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档