當前位置:成語大全網 - 書法字典 - 哈希函數的構造方法

哈希函數的構造方法

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

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(k 1)= H(K2)。統壹的哈希函數可以減少沖突,但無法避免沖突。沖突發生後,必須解決;也就是說,我們必須找到下壹個可用地址並解決沖突:

1.鏈接方法(zipper方法):具有相同哈希地址的記錄存儲在壹個線性鏈表中。例如,在余數法中,設關鍵字為(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,並通過線性探索解決沖突。