專利名稱::一種減少哈希沖突的哈希查找方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于查找算法領(lǐng)域,具體涉及一種哈希查找方法,尤其涉及一種減少哈希沖突的哈希查找方法。
背景技術(shù):
:哈希表是種數(shù)據(jù)結(jié)構(gòu),它可以提供快速的插入操作和查找操作。哈希表(Hashtable,也叫散列表),是根據(jù)關(guān)鍵碼值(Keyvalue)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)。也就是說,它通過把關(guān)鍵碼值映射到表中一個(gè)位置來訪問記錄,以加快查找的速度。這個(gè)映射函數(shù)叫做哈希函數(shù)(或散列函數(shù)),存放記錄的數(shù)組叫做哈希表(或散列表)。所有哈希函數(shù)都有如下一個(gè)基本特性如果兩個(gè)哈希值是不相同的(根據(jù)同一函數(shù)),那么這兩個(gè)哈希值的原始輸入也是不相同的。這個(gè)特性使哈希函數(shù)具有確定性的結(jié)果。但另一方面,哈希函數(shù)的輸入和輸出不是一一對(duì)應(yīng)的,如果兩個(gè)哈希值相同,兩個(gè)輸入值很可能是相同的,但并不能絕對(duì)肯定二者一定相等。對(duì)不同的關(guān)鍵字可能得到同一哈希值,即keyl興key2,而f(keyl)=f(key2),這種現(xiàn)象稱為哈希沖突。哈希查找是通過計(jì)算數(shù)據(jù)元素的存儲(chǔ)地址進(jìn)行查找的一種方法。傳統(tǒng)的哈希查找方法的操作步驟為(1)用給定的哈希函數(shù)構(gòu)造哈希表;(根據(jù)選擇的沖突處理方法解決地址沖突;C3)在哈希表的基礎(chǔ)上執(zhí)行哈希查找。傳統(tǒng)的建立哈希表的操作步驟為1.取數(shù)據(jù)元素的關(guān)鍵字key,計(jì)算其哈希函數(shù)值(地址)。若該地址對(duì)應(yīng)的存儲(chǔ)空間還沒有被占用,則將該元素存入;否則執(zhí)行步驟2解決沖突。2.根據(jù)選擇的沖突處理方法,計(jì)算關(guān)鍵字key的下一個(gè)存儲(chǔ)地址。若下一個(gè)存儲(chǔ)地址仍被占用,則繼續(xù)執(zhí)行步驟2,直到找到能用的存儲(chǔ)地址為止。傳統(tǒng)的哈希查找步驟為1.設(shè)哈希表為HSTWM-1],哈希函數(shù)取H(key),解決沖突的方法為R(X);2.對(duì)給定k值,計(jì)算哈希地址Di=H(k);若HST為空,則查找失??;若HST=k,則查找成功;否則,執(zhí)行步驟3(處理沖突)。3.重復(fù)計(jì)算處理沖突的下一個(gè)存儲(chǔ)地址Dk=R(Dk-I),直到HST[Dk]為空,或HST[Dk]=k為止。若HST[Dk]=K,則查找成功,否則查找失敗。雖然我們不希望發(fā)生哈希沖突,但實(shí)際上發(fā)生沖突的可能性仍是存在的。當(dāng)關(guān)鍵字值域遠(yuǎn)大于哈希表的長(zhǎng)度,而且事先并不知道關(guān)鍵字的具體取值時(shí),哈希沖突就難免會(huì)發(fā)生。
發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種減少哈希沖突的哈希查找方法,該方法可以有效地降低發(fā)生哈希沖突的概率。為解決上述技術(shù)問題,本發(fā)明提供一種減少哈希沖突的哈希查找方法,包括如下步驟(1)增加一個(gè)index表,采用rule表結(jié)合index表的方法,并將index表項(xiàng)大小擴(kuò)大為rule表項(xiàng)的2倍(即該index表項(xiàng)大小擴(kuò)大為rule表中rule數(shù)量N的2倍,使哈希函數(shù)的結(jié)果擴(kuò)大了一倍);(2)rule表中將rule分為N個(gè)桶,每個(gè)桶包含m個(gè)rule;index表的內(nèi)容是rule所在的桶的索引;(3)在以上改進(jìn)后的哈希表的基礎(chǔ)上執(zhí)行哈希查找。步驟(3)中,添加一條rule的步驟如下A.根據(jù)哈希函數(shù)得到的哈希值,索引index表,得到桶的地址;B.然后在該桶內(nèi)的空閑位置寫入rule。所述桶內(nèi)的空閑位置的有效標(biāo)識(shí)位V為0,寫入rule后將有效標(biāo)識(shí)位V值置為1。步驟(3)中,查找一條rule的步驟如下A.根據(jù)哈希函數(shù)得到哈希值,索引index表;B.通過查index表,得到桶的索引,如果該索引是個(gè)無效值,則表示rule表里無命中項(xiàng),結(jié)束查找;否則進(jìn)入步驟C;C.根據(jù)得到的桶索引,繼續(xù)索引rule表,找到指定的桶后,在該桶里的有效標(biāo)識(shí)位V為1的若干條rule里進(jìn)行查找,最后得到查找結(jié)果。和現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果跟傳統(tǒng)的哈希查找方法相比,本發(fā)明將rule表的結(jié)構(gòu)進(jìn)行了調(diào)整,并增加了一個(gè)index表,引入bucket(桶)的思想,分級(jí)查找,使得哈希沖突的可能性大大降低,同時(shí)將哈希函數(shù)的結(jié)果擴(kuò)大為實(shí)際rule數(shù)目的2倍,更加降低發(fā)生哈希沖突的概率。圖1是本發(fā)明方法的示意圖。具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。如圖1所示,本發(fā)明在現(xiàn)有的rule表基礎(chǔ)上增加一個(gè)index表,采用rule表結(jié)合index表的方法,且對(duì)rule表的結(jié)構(gòu)做一下調(diào)整,將m個(gè)規(guī)則(rule)分在一個(gè)桶(bucket)內(nèi),所有rule分為N/m個(gè)桶。除了rule表之外,需要另增加一個(gè)index(索引)表,index表的內(nèi)容是rule所在的桶的索引,這樣查找時(shí)進(jìn)行兩次索引就可以得到結(jié)果。同時(shí),將index表項(xiàng)大小擴(kuò)大為rule表的2倍,即rule表為IN(rule的數(shù)量),index表為2N(rule數(shù)量的2倍),使得哈希函數(shù)的結(jié)果擴(kuò)大了一倍,可以更加有效的降低哈希沖突的概率。下面舉一實(shí)施例詳細(xì)說明本發(fā)明哈希查找方法的實(shí)施步驟(見圖1)在rule表中添加rule,具體步驟如下1.根據(jù)哈希函數(shù)得到的哈希值K,索引index表,得到bucket的ID(地址);2.然后在該bucket內(nèi)的空閑位置(圖1中有效標(biāo)識(shí)位V為0),寫入rule,并將有效標(biāo)識(shí)位V值置為1。哈希查找過程如下1.根據(jù)哈希函數(shù)得到哈希值K,索引index表;2.通過查index表,得到bucket的索引,如果該索引是個(gè)無效值,則表示rule表里無命中項(xiàng),結(jié)束查找;否則進(jìn)入下一步步驟3;3.根據(jù)得到的bucket索引,繼續(xù)索引rule表,找到指定的bucket后,接下來在該bucket里的有效標(biāo)識(shí)位V為1的若干條rule里進(jìn)行查找,最后得到查找結(jié)果。由上述實(shí)施例可見,本發(fā)明增加了一個(gè)index表,采用rule表結(jié)合index表的方法,且引入bucket(桶)的思想,分級(jí)查找,使得哈希沖突的可能性大大降低,同時(shí)將哈希函數(shù)的結(jié)果擴(kuò)大為實(shí)際rule數(shù)目的2倍,更加降低發(fā)生哈希沖突的概率。權(quán)利要求1.一種減少哈希沖突的哈希查找方法,其特征在于,包括如下步驟(1)增加一個(gè)index表,采用rule表結(jié)合index表的方法,并將index表項(xiàng)大小擴(kuò)大為rule表項(xiàng)的2倍;(2)rule表中將rule分為N個(gè)桶,每個(gè)桶包含m個(gè)rule;index表的內(nèi)容是rule所在的桶的索引;(3)在以上改進(jìn)后的哈希表的基礎(chǔ)上執(zhí)行哈希查找。2.如權(quán)利要求1所述的減少哈希沖突的哈希查找方法,其特征在于,步驟(1)中,所述將index表項(xiàng)大小擴(kuò)大為rule表項(xiàng)的2倍是將index表項(xiàng)大小擴(kuò)大為rule表中rule數(shù)量的2倍。3.如權(quán)利要求1所述的減少哈希沖突的哈希查找方法,其特征在于,步驟(3)中,添加一條rule的步驟如下A.根據(jù)哈希函數(shù)得到的哈希值,索引index表,得到桶的地址;B.然后在該桶內(nèi)的空閑位置寫入rule。4.如權(quán)利要求3所述的減少哈希沖突的哈希查找方法,其特征在于,步驟B中,所述桶內(nèi)的空閑位置的有效標(biāo)識(shí)位V為0,寫入rule后將有效標(biāo)識(shí)位V值置為1。5.如權(quán)利要求1所述的減少哈希沖突的哈希查找方法,其特征在于,步驟(3)中,查找一條rule的步驟如下A.根據(jù)哈希函數(shù)得到哈希值,索引index表;B.通過查index表,得到桶的索引,如果該索引是個(gè)無效值,則表示rule表里無命中項(xiàng),結(jié)束查找;否則進(jìn)入步驟C;C.根據(jù)得到的桶索引,繼續(xù)索引rule表,找到指定的桶后,在該桶里的有效標(biāo)識(shí)位V為1的若干條rule里進(jìn)行查找,最后得到查找結(jié)果。全文摘要本發(fā)明公開了一種減少哈希沖突的哈希查找方法,包括如下步驟(1)增加一個(gè)index表,采用rule表結(jié)合index表的方法,并將index表項(xiàng)大小擴(kuò)大為rule表項(xiàng)的2倍;(2)rule表中將rule分為N個(gè)桶,每個(gè)桶包含m個(gè)rule;index表的內(nèi)容是rule所在的桶的索引;(3)在以上改進(jìn)后的哈希表的基礎(chǔ)上執(zhí)行哈希查找。該方法可以有效地降低發(fā)生哈希沖突的概率。文檔編號(hào)G06F17/30GK102346735SQ20101023975公開日2012年2月8日申請(qǐng)日期2010年7月29日優(yōu)先權(quán)日2010年7月29日發(fā)明者何運(yùn)鋒,張榮斌申請(qǐng)人:高通創(chuàng)銳訊通訊科技(上海)有限公司