雜湊函式的構造方法與衝突解決方案

2021-10-02 19:06:31 字數 929 閱讀 9482

雜湊函式的構造方法:

1.直接定值法

取關鍵字或關鍵字的某個線性函式值為雜湊位址。即h(key)=key或h(key) = a·key + b,其中a和b為常數(這種雜湊函式叫做自身函式)

2.除留餘數法

取關鍵字被數p除后所得的餘數為雜湊位址。即 h(key) = key mod p,(p<=m,m表雜湊表的長度)

例:h(key)=key%13

3.數字分析法

這種構造試用與關鍵字的位數比位址的位數多且某幾位數字區別不大或就是相同的,那麼此時可以去掉這些相近的數字,用餘下的數字來進行hash。

4.平方取中法

將關鍵字平方然後取其中的幾位作為位址。

5.摺疊法

與數字分析的條件略有不同,這種方法試用於數字較多且每位分布均勻,例如1234567890有十位數,沒有這麼大的位址,假設我們想得到乙個3或4位數,這個數可拆分為123+456+789+0=1368作為hash位址。

6.基數轉換法

例如(321)10十進位制的數我將它看成16進製制的數,將其再轉為10進製,再用數字分析法將其中的幾位作為hash位址。

雜湊衝突的解決方案有那些:

1.開放位址法

一旦發生了衝突,就去尋找下乙個位址,只要雜湊表足夠大,空的位址總能夠找到,找到則記錄存入;

找位址的方法有:線性探測法、二次探測法、隨機探測法

2.再雜湊函式法

發生雜湊位址衝突時,換乙個雜湊位址計算,相信總會有乙個函式是可以解決衝突的;

這種方法可以使關鍵字不產生聚集,但增加了計算時間

3.鏈位址法

將所有給定的雜湊函式求得的雜湊位址相同的關鍵字儲存在同一線性鍊錶中;

這種方法絕不會出現找不到位址的情況,但是查詢時要遍歷鍊錶

4.公共溢位區法

就是把衝突的關鍵字放在乙個新錶中;

這個方法的查詢性還是比較高的

雜湊函式的構造方法以及衝突解決辦法

常用的構造雜湊函式的方法有 h key key 或 h key a key b 其中a和b為常數 這種雜湊函式叫做自身函式 例如 有乙個從1歲到100歲的人口數字統計表,其中,年齡作為關鍵字,雜湊函式取關鍵字自身。這樣,若要詢問25歲的人有多少,則只要查表的第25項即可。又如 有乙個解放後出生的人口...

雜湊表 雜湊函式 雜湊衝突與解決

雜湊表 通過關鍵碼來對映到值的乙個資料結構 雜湊函式 鍵與值對映的乙個對映關係 常用方法 1 直接定址法 f x kx b k b都是常數 一旦確定了雜湊函式,那麼新增 獲取元素都需要通過這個雜湊函式 2 除留餘數法 f x x k k是常數,k m m為儲存位置長度 其他幾種方法 方法名說明 適合...

雜湊表的構造方法以及解決衝突的方法

一 雜湊表是什麼?雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f key 對任意給定的關鍵字值k...