若結構中存在關鍵字和K相等的記錄,則必定在f(K)的儲存位置上。由此,不許比較便可直接取得所查記錄。稱這個對應關係f為散列函數(Hash Function),按這個思想建立的表稱為散列表。
對不同的關鍵字可能得到同一散列地址,即key1!=key2,而H(key1)==H(key2),這種現象稱為衝突。具有相同函數值的關鍵字對該散列函數來說稱作同義字。
綜上所述:根據散列函數f(key)和處理衝突的方法將一組關鍵字映像到一個有序的連續地址集上,並以關鍵字所在地址集上的‘象’作為記錄在表中中儲存位置。這種表稱為散列表,這一映像過程稱為散列。所得的儲存位置稱為散列地址。
對於關鍵字集合中的任一個關鍵字,經散列函數映像到地址集合上任一個地址的機率是相等的,則稱此類散列函數為均勻散列函數。這就是使關鍵字經過散列函數得到一個隨機的地址,從而減少衝突。
散列函數能使對一個資料序列的訪問過程更加迅速有效,通過散列函數,資料元素將被更快的定位。
1)直接定址法:取關鍵字或關鍵字的某個線性函數值為散列地址。即H(key)=key或者H(key)=a*key+b,a和b為常數
2)數字分析法
3)平方取中法:計算關索引值,再取中間R位形成一個R*R位的表
4)摺疊法:把所有字元的ASCII碼加起來(對於字串)
5)隨機數法
6)除留餘數法:取關鍵字被某個不大於散列表表長m的數p除後所得的餘數為散列地址。即H(key)=key MOD p, (p<m)。不僅可以對關鍵字直接模數,也可在摺疊、平方取中等運算之後再模數。對p的選擇很重要,一般取素數或m,若p選得不好,容易產生同義字。
--------------------------------------------------從第一次筆試就考到散列表,但是到現在還沒有弄明白-----------------------------
------------------------------------------------- 又過了一星期,還是不想看-----------------------------------------------------------------