Easyfun Easy fun Easy to play

Hashing

雜湊法是利用雜湊函數來計算一個鍵值所對應的位址,進而建立雜湊表格,然後依賴雜湊函數來搜尋找到各鍵值存放在表格中的位址,搜尋速度與資料多少無關,在沒有碰撞和溢位下,一次讀取即可,且保密性高,因為不事先知道雜湊函數就無法搜尋。

除法

除法是最簡單的雜湊法是將資料除以某一個常數後,取餘數來當索引。

例:有11個位置的陣列中,只使用6個位址。那我們可以把陣列內的值除以11,並以其餘數來當索引。

h(key) = key mod B

B=11

索引 資料
0 60
1  
2 65
3  
4  
5  
6 70
7  
8 33
9 98
10 75

中間平方法

中間平方法跟除法類似,它是把資料乘以自己,再取中間的某段數字做索引。

例:用中間平方法,將它放在100個位址裡

1.將60,65,70,33,98,75平方後

3600,4225,4900,1089,9604,5625

2.取百位數和十位數作為鍵值

60,22,90,08,60,62

這六個數的數列就是原先的60,65,70,33,98,75存放在100個位址空間的索引值。

f(60) = 60
f(22) = 65
f(90) = 70
f(8) = 33
f(60) = 98
f(62) = 75

若實際空間介於0~9,但取百位數及十位數的值介於0~99,所以必須將中間平方法第一次求得的鍵值,再行壓縮1/10才可以將100個可能生產的值對應到10個空間,即將每一個鍵值除以10取整數。

折疊法

折疊法是將資料轉換成一串數字後,將這串數字拆成數個部分,最後再加起來,就可算出這個鍵值的bucket address。

有一份資料轉換成數字為2365479125443,以每4個字為一部分則可拆為2365,4791,2544,3。將四組數字加起來為索引值。

alt text

折疊法的分類

  • 移動折疊法:將每一部分相加所得的值為其bucket address

  • 邊界折疊法:將每一部分的奇數位段或偶數位段,再行相加起來取得其bucket address

alt text

alt text

數位分析法

數位分析法適用於資料不會更改,且數字型態的資料,再決定雜湊函數時先逐一檢查資料的相對位置及分佈情形,將重複性高的部分刪除。

以電話表為例:

電話表算是有規律性的,再02區碼這邊看,中間三個數變化不大,假設位址空間大小m=999,我們須從下列數字擷取適當的數,及數字比較不集中,分布範圍較為平均,再決定最後那四個數字的末三碼,可得雜湊表。

alt text