一种减少哈希冲突的哈希查找方法

文档序号:6606773阅读:230来源:国知局

专利名称::一种减少哈希冲突的哈希查找方法
技术领域
:本发明属于查找算法领域,具体涉及一种哈希查找方法,尤其涉及一种减少哈希冲突的哈希查找方法。
背景技术
:哈希表是种数据结构,它可以提供快速的插入操作和查找操作。哈希表(Hashtable,也叫散列表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(或散列函数),存放记录的数组叫做哈希表(或散列表)。所有哈希函数都有如下一个基本特性如果两个哈希值是不相同的(根据同一函数),那么这两个哈希值的原始输入也是不相同的。这个特性使哈希函数具有确定性的结果。但另一方面,哈希函数的输入和输出不是一一对应的,如果两个哈希值相同,两个输入值很可能是相同的,但并不能绝对肯定二者一定相等。对不同的关键字可能得到同一哈希值,即keyl兴key2,而f(keyl)=f(key2),这种现象称为哈希冲突。哈希查找是通过计算数据元素的存储地址进行查找的一种方法。传统的哈希查找方法的操作步骤为(1)用给定的哈希函数构造哈希表;(根据选择的冲突处理方法解决地址冲突;C3)在哈希表的基础上执行哈希查找。传统的建立哈希表的操作步骤为1.取数据元素的关键字key,计算其哈希函数值(地址)。若该地址对应的存储空间还没有被占用,则将该元素存入;否则执行步骤2解决冲突。2.根据选择的冲突处理方法,计算关键字key的下一个存储地址。若下一个存储地址仍被占用,则继续执行步骤2,直到找到能用的存储地址为止。传统的哈希查找步骤为1.设哈希表为HSTWM-1],哈希函数取H(key),解决冲突的方法为R(X);2.对给定k值,计算哈希地址Di=H(k);若HST为空,则查找失败;若HST=k,则查找成功;否则,执行步骤3(处理冲突)。3.重复计算处理冲突的下一个存储地址Dk=R(Dk-I),直到HST[Dk]为空,或HST[Dk]=k为止。若HST[Dk]=K,则查找成功,否则查找失败。虽然我们不希望发生哈希冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时,哈希冲突就难免会发生。
发明内容本发明要解决的技术问题是提供一种减少哈希冲突的哈希查找方法,该方法可以有效地降低发生哈希冲突的概率。为解决上述技术问题,本发明提供一种减少哈希冲突的哈希查找方法,包括如下步骤(1)增加一个index表,采用rule表结合index表的方法,并将index表项大小扩大为rule表项的2倍(即该index表项大小扩大为rule表中rule数量N的2倍,使哈希函数的结果扩大了一倍);(2)rule表中将rule分为N个桶,每个桶包含m个rule;index表的内容是rule所在的桶的索引;(3)在以上改进后的哈希表的基础上执行哈希查找。步骤(3)中,添加一条rule的步骤如下A.根据哈希函数得到的哈希值,索引index表,得到桶的地址;B.然后在该桶内的空闲位置写入rule。所述桶内的空闲位置的有效标识位V为0,写入rule后将有效标识位V值置为1。步骤(3)中,查找一条rule的步骤如下A.根据哈希函数得到哈希值,索引index表;B.通过查index表,得到桶的索引,如果该索引是个无效值,则表示rule表里无命中项,结束查找;否则进入步骤C;C.根据得到的桶索引,继续索引rule表,找到指定的桶后,在该桶里的有效标识位V为1的若干条rule里进行查找,最后得到查找结果。和现有技术相比,本发明具有以下有益效果跟传统的哈希查找方法相比,本发明将rule表的结构进行了调整,并增加了一个index表,引入bucket(桶)的思想,分级查找,使得哈希冲突的可能性大大降低,同时将哈希函数的结果扩大为实际rule数目的2倍,更加降低发生哈希冲突的概率。图1是本发明方法的示意图。具体实施例方式下面结合附图和实施例对本发明作进一步详细的说明。如图1所示,本发明在现有的rule表基础上增加一个index表,采用rule表结合index表的方法,且对rule表的结构做一下调整,将m个规则(rule)分在一个桶(bucket)内,所有rule分为N/m个桶。除了rule表之外,需要另增加一个index(索引)表,index表的内容是rule所在的桶的索引,这样查找时进行两次索引就可以得到结果。同时,将index表项大小扩大为rule表的2倍,即rule表为IN(rule的数量),index表为2N(rule数量的2倍),使得哈希函数的结果扩大了一倍,可以更加有效的降低哈希冲突的概率。下面举一实施例详细说明本发明哈希查找方法的实施步骤(见图1)在rule表中添加rule,具体步骤如下1.根据哈希函数得到的哈希值K,索引index表,得到bucket的ID(地址);2.然后在该bucket内的空闲位置(图1中有效标识位V为0),写入rule,并将有效标识位V值置为1。哈希查找过程如下1.根据哈希函数得到哈希值K,索引index表;2.通过查index表,得到bucket的索引,如果该索引是个无效值,则表示rule表里无命中项,结束查找;否则进入下一步步骤3;3.根据得到的bucket索引,继续索引rule表,找到指定的bucket后,接下来在该bucket里的有效标识位V为1的若干条rule里进行查找,最后得到查找结果。由上述实施例可见,本发明增加了一个index表,采用rule表结合index表的方法,且引入bucket(桶)的思想,分级查找,使得哈希冲突的可能性大大降低,同时将哈希函数的结果扩大为实际rule数目的2倍,更加降低发生哈希冲突的概率。权利要求1.一种减少哈希冲突的哈希查找方法,其特征在于,包括如下步骤(1)增加一个index表,采用rule表结合index表的方法,并将index表项大小扩大为rule表项的2倍;(2)rule表中将rule分为N个桶,每个桶包含m个rule;index表的内容是rule所在的桶的索引;(3)在以上改进后的哈希表的基础上执行哈希查找。2.如权利要求1所述的减少哈希冲突的哈希查找方法,其特征在于,步骤(1)中,所述将index表项大小扩大为rule表项的2倍是将index表项大小扩大为rule表中rule数量的2倍。3.如权利要求1所述的减少哈希冲突的哈希查找方法,其特征在于,步骤(3)中,添加一条rule的步骤如下A.根据哈希函数得到的哈希值,索引index表,得到桶的地址;B.然后在该桶内的空闲位置写入rule。4.如权利要求3所述的减少哈希冲突的哈希查找方法,其特征在于,步骤B中,所述桶内的空闲位置的有效标识位V为0,写入rule后将有效标识位V值置为1。5.如权利要求1所述的减少哈希冲突的哈希查找方法,其特征在于,步骤(3)中,查找一条rule的步骤如下A.根据哈希函数得到哈希值,索引index表;B.通过查index表,得到桶的索引,如果该索引是个无效值,则表示rule表里无命中项,结束查找;否则进入步骤C;C.根据得到的桶索引,继续索引rule表,找到指定的桶后,在该桶里的有效标识位V为1的若干条rule里进行查找,最后得到查找结果。全文摘要本发明公开了一种减少哈希冲突的哈希查找方法,包括如下步骤(1)增加一个index表,采用rule表结合index表的方法,并将index表项大小扩大为rule表项的2倍;(2)rule表中将rule分为N个桶,每个桶包含m个rule;index表的内容是rule所在的桶的索引;(3)在以上改进后的哈希表的基础上执行哈希查找。该方法可以有效地降低发生哈希冲突的概率。文档编号G06F17/30GK102346735SQ20101023975公开日2012年2月8日申请日期2010年7月29日优先权日2010年7月29日发明者何运锋,张荣斌申请人:高通创锐讯通讯科技(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1