发布时间:2025-01-27 17:10:48 点击量:
HASH GAME - Online Skill Game GET 300
璐SNl 伽9—30斛Com puter Know l edgeandTechnol ogy电誓知识与技术V01.7,N o.I,J 蛐uary 201l , pp.105-106哈希插入排序张永成( 西南民族大学计算机科学与技术学院,四川成都610041)E—m ai l :i nfo@ CCCC.net.Cl tlhttp://w w w .dnzs.net.cnTel :+86—551—964摘要:排序是软件领域的基本1-3题,常用排序算法中,快速排序算法最快,时间复杂度为O ( n*Irm ) 。基数排序算法的时间复杂度可以达到O (g(n+m g))。并且只适合于像整数、字符串这类有明显结构特征的数据。我们在本文中提出一种新型的排序算法——哈希插入排序。它将哈希算法用于排序中。通过概率统...
璐SNl 伽930斛Com puter Know l edgeandTechnol ogy电誓知识与技术V01.7,N o.I,J 蛐uary 201l , pp.105-106哈希插入排序张永成( 西南民族大学计算机科学与技术学院,四川成都610041)Em ai l :i nfo@ CCCC.net.Cl tlhttp://w w w .dnzs.net.cnTel :+86551964摘要:排序是软件领域的基本1-3题,常用排序算法中,快速排序算法最快,时间复杂度为O ( n*Irm ) 。基数排序算法的时间复杂度可以达到O (g(n+m g))。并且只适合于像整数、字符串这类有明显结构特征的数据。我们在本文中提出一种新型的排序算法哈希插入排序。它将哈希算法用于排序中。通过概率统计分析,证明它的时间复杂度为o(妻n),大大优于基数排序。关键词:排序:哈希:字符串数据结构;文本数据库。中图分类号:TP311文献标识码:A文章编号:10093044( 2011) 01-0105-02排序理论中存在一个基本原则:将一个大的数据集划分成许多小数据集将大大提高排序的效率。采用这一原则的算法被称为划分一归并排序算法,快速排序和归并排序是其中两种。然而,这两种算法需要许多步递归过程将一个大数据集划分成许多只包含一个数据的小数据集。在划分完成之后,归并排序还需要进行递归的归并,这都降低了排序的效率。直接基数排序算法是另外一种划分一归并排序算法。直接基数排序算法使用29个桶来划分有序队列。首先使用最高g位( i bl i b一2⋯ i bg) 关键字,根据这g位关键字将数据放到各个桶中,这g位关键字具有相同值的数据被放到一个桶中。同样的,第二趟中,每个桶中的数据根据接下来的g位( i b-( g+1) i b一( g+2) ⋯ i b一29) 关键字进行划分,每个桶中的数据被分到m 个新的子桶中,后面的几趟也是这样进行。这样,数据一直没有离开它被分配到的桶。一个显著的问题是桶( 子桶) 的数量将会迅速爆炸,很多桶中只有很少的数据141。直接基数排序箅法的时间复杂度是0( g( n+m g) ) 。三路基数快速排序是另外一种基于这一原则的排序算法。同快速排序算法一样,它将数据分为三部分:大于,小于和等于给定值。同基数排序相似,当前输入等于初始的字符,移到下一位字符。161这些算法都需要许多步来完成把一个大数据集分成许多小数据集的工作。那么是否可以找到一种算法。使得这一过程可以一步完成?哈希函数可以做到这一点。在计算机领域中,排序和哈希是两种完全不同的概念。原因在于.一个数据在有序表中的位置不仅仅由它的关键字的值决定。也受这个数据集的上下文环境影响。哈希函数只考虑使用关键字的值来组织哈希表,所以寻找一个哈希值,使数据在有序表中位置的哈希函数是几乎不可能的。即使存在,它也很复杂,效率很低。然而.我们发现哈希是一种很好的划分方法。冲突是哈希中的一种重要概念,降低冲突是设计哈希函数所需要重点考虑的因素。但从另一方面,两个数据的哈希值冲突。说明这两个数据被分到一个组中.这样划分就只需要~步来完成。在本文中,我们将给出一种新的排序算法,它使用哈希的方式,将大数据集分为许多小数据集。使用插入排序对每个小数据集进行排序。在第l 节中给出一些作为该算法基础的定义,在第2节中给出算法描述,在第3节中给出算法的性能分析,在第4节中给出针对冗余编码的关键字的改进。.1定义定义1( 完美哈希函数) :一个哈希函数是完美哈希函数,当且仅当这个哈希甬数能够给每一个数据一个唯一的哈希值。i l l定义2( 超级哈希函数) :一个哈希函数是一个超级哈希函数,当且仅当它的结果是一个全序关系,并且是一个完美哈希函数。fl 】W i l l i amF.Gi l reath提出文献【l 卜一种超级哈希函数,但这类哈希甬数比较复杂,而且不容易找到。这是由于数据在有序线性表中的位置不仅仅由它的关键字的值决定,还取决于其他数据的关键字的值,即它所处的上下文环境。但这里可以找到一种弱化要求的哈希甬数.这就是下面定义的划分哈希函数。定义3 f划分哈希函数)划分哈希函数的结果是一个偏序关系,即,将具有相同哈希值的数据视为一个集合。那么一个集合中的数据将都大于或者等于( 小于或者等于) 另一个集合中的数据。最简单的划分哈希函数就是使用前k位关键字的值作为哈希值,将所有数据分到2k个子线性表中。进行这次划分操作只需要对每个数据进行一次操作,这大大优于快速排序算法。2数据结构和算法下面考虑哈希插入排序算法,首先考虑非冗余关键字。该算法首先是使用使划分哈希甬数将整个线性表分为许多小的线性表。这里我们采用最简单的划分哈希甬数,即使用关键字的前k位的值作为哈希值.将数据分到2k个子线性表中。这些子线性表的顺序由划分哈希函数确定。即,子线性表A在子线性表B之前.当且仅当子线性表A中的所有数据的关键字的值都大于子线性表B中所有数据的关键字的值。在将一个数据放到一个子线性表中时,按照插入排序的插入操作的方式进行。由于同一个字线性表中所有数据的开头k个字符的值都相同,所以当一个数据的关键字长度小于或者等于k时,直接将其放在队列的开头。最后根据这些子线性表的顺序将它们连成有序的线本栏目责任编辑:冯蕾万方数据- - - - 嘲络通讯厦安垒 105