Adblocker
常見的哈希算法與碰撞算法
哈希算法
- 直接定址法:直接以關鍵字k或者k加上某個常數(k+c)作為哈希地址。
- 數字分析法:提取關鍵字中取值比較均勻的數字作為哈希地址。
- 除留余數法:用關鍵字k除以某個不大於哈希表長度m的數p,將所得余數作為哈希表地址。
- 分段疊加法:按照哈希表地址位數將關鍵字分成位數相等的幾部分,其中最后一部分可以比較短。然后將這幾部分相加,舍棄最高進位后的結果就是該關鍵字的哈希地址。
- 平方取中法:如果關鍵字各個部分分布都不均勻的話,可以先求出它的平方值,然后按照需求取中間的幾位作為哈希地址。
- 偽隨機數法:采用一個偽隨機數當作哈希函數
解決碰撞算法
- 開放定址法
- 開放定址法就是一旦發生了沖突,就去尋找下一個空的散列地址,只要散列表足夠大,空的散列地址總能找到,並將記錄存入。
- 鏈地址法
- 將哈希表的每個單元作為鏈表的頭結點,所有哈希地址為i的元素構成一個同義詞鏈表。即發生沖突時就把該關鍵字鏈在以該單元為頭結點的鏈表的尾部。
- 再哈希法
- 當哈希地址發生沖突用其他的函數計算另一個哈希函數地址,直到沖突不再產生為止。
- 建立公共溢出區
- 將哈希表分為基本表和溢出表兩部分,發生沖突的元素都放入溢出表中。