當前位置:吉日网官网 - 傳統美德 - 哈希函數的構造方法

哈希函數的構造方法

構造哈希函數常用的方法有:直接尋址法、數字分析法、取平方法、折疊法、除余數法、隨機數法。

1,直接尋址方法

以關鍵字或關鍵字的線性函數值作為哈希地址。即:H(key)=key或h (key) = akey+b .其中a和b為常數(這個哈希函數稱為自身函數)。

2.數字分析方法

假設關鍵詞是基於R的數(比如基於10的十進制數),哈希表中所有可能的關鍵詞都是預先知道的,那麽可以用關鍵詞的幾個數字組成壹個哈希地址。

3、廣場取法。

關鍵字平方後的中間數字是哈希地址。這是構造哈希函數的常用方法。通常在選擇哈希函數的時候,妳可能並不知道所有的關鍵詞,也不壹定合適選擇哪幾個,但是壹個數的平方的中間位數和這個數的每壹位都有關系。

4.折疊法

將關鍵字分成若幹個位數相同的部分(最後壹部分的位數可以不同),然後取這些部分的疊加和(四舍五入)作為哈希地址。這種方法叫做折疊。當關鍵字很多,並且每個關鍵字上的數字分布幾乎均勻時,可以通過折疊的方法得到哈希地址。

5,余者除外。

通過將關鍵字除以不大於哈希表長度m的數p得到的余數是哈希地址。即H(key) = key MOD p,pm。這是構造哈希函數最簡單也是最常用的方法。它不僅可以直接取關鍵詞的模(MOD),還可以取折疊和平方平均運算後的模。

6.隨機數方法

選擇壹個隨機函數,取關鍵字的隨機函數值作為其哈希地址,即H(key)=random(key),其中random為隨機函數。通常在關鍵字長度不等的情況下,用這種方法構造哈希函數比較合適。

沖突的處理:

在哈希表中,不同的鍵值對應相同的存儲位置。即關鍵字K1≠K2,但H (K1) = H (K2)。統壹的哈希函數可以減少沖突,但不能避免沖突。沖突發生後,必須解決;也就是說,我們必須找到下壹個可用地址並解決沖突:

1.鏈接法(zipper method):哈希地址相同的記錄存儲在壹個線性鏈表中。比如余數法,設鍵為(18,14,01,68,27,55,79),除數為13,哈希地址為(5,1,1)。

2.開放式尋址方式:如果h(k)已經被占用,按以下順序探測:(H (k)+P (1))% Tsize,(H (k)+P (2))% Tsize,?,(h(k)+p(i))%TSize,?其中h(k)是哈希函數,TSize是哈希表長度,p(i)是探測函數。

在h (k)+p(i-1))% tsize的基礎上,如果發現沖突,增量p(i)用於新的檢測,直到沒有沖突出現。

根據探測函數p(i)的不同,開放式尋址方法可分為線性探測法(p(i) = i: 1,2,3,?),二次勘探法(p(I)=(-1)(I-1)*((I+1)/2)2,勘探順序為:1,-1,4。)。

隨機探測法(p(i):隨機數),雙哈希函數法(雙哈希函數h(key),hp (key)如果h(key)沖突,用hp (key)查找哈希地址。勘探順序是:h(k),h(k)+ hp(k),?,h(k)+ i*hp(k))。

3.桶尋址法:桶是壹個足夠大的存儲空間。桶尋址將桶與表中的每個地址相關聯。如果桶滿了,可以用開放式尋址的方法來處理。比如插入A5,A2,A3,B5,A9,B2,B9,C2,通過線性探索解決沖突。

  • 上一篇:壹個有文化傳統的網女。
  • 下一篇:剪紙英語怎麽讀
  • copyright 2024吉日网官网