哈希函数 直接定址法 除留余数法
直接定址法
??直接定址法是以數(shù)據(jù)元素關(guān)鍵字k本身或它的線性函數(shù)作為它的哈希地址,即:H(k)=k??或?H(k)=a×k+b?;?(其中a,b為常數(shù))
??例1,有一個(gè)人口統(tǒng)計(jì)表,記錄了從1歲到100歲的人口數(shù)目,其中年齡作為關(guān)鍵字,哈希函數(shù)取關(guān)鍵字本身,如圖(1):
| 地址 | A1 | A2 | …… | A99 | A100 |
| 年齡 | 1 | 2 | …… | 99 | 100 |
| 人數(shù) | 980 | 800 | …… | 495 | 107 |
可以看到,當(dāng)需要查找某一年齡的人數(shù)時(shí),直接查找相應(yīng)的項(xiàng)即可。如查找99歲的老人數(shù),則直接讀出第99項(xiàng)即可。這種哈希函數(shù)簡單,并且對(duì)于不同的關(guān)鍵字不會(huì)產(chǎn)生沖突,但可以看出這是一種較為特殊的哈希函數(shù),實(shí)際生活中,關(guān)鍵字的元素很少是連續(xù)的。用該方法產(chǎn)生的哈希表會(huì)造成空間大量的浪費(fèi),因此這種方法適應(yīng)性并不強(qiáng)。[2]↑
除留余數(shù)法
取關(guān)鍵字被某個(gè)不大于哈希表表長m的數(shù)p除后所得余數(shù)為哈希地址,即設(shè)定哈希函數(shù)為??Hash(key)=key?mod?p?(p≤m),其中,除數(shù)p稱作模。
除留余數(shù)法不僅可以對(duì)關(guān)鍵字直接取模,也可以在折疊、平方取中等運(yùn)算后取模。對(duì)于除留余數(shù)法求哈希地址,關(guān)鍵在于模p的選擇。使得數(shù)據(jù)元素集合中每一個(gè)關(guān)鍵字通過該哈希函數(shù)映射到內(nèi)存單元的任意地址上的概率相等,從而盡可能減少發(fā)生哈希沖突的可能性。
理論研究表明,除留余數(shù)法的模p取不大于表長且最接近表長m素?cái)?shù)時(shí)效果最好,且p最好取1.1n~1.7n之間的一個(gè)素?cái)?shù)(n為存在的數(shù)據(jù)元素個(gè)數(shù))。例如:當(dāng)n=7時(shí),p最好取11、13等素?cái)?shù)。?又例圖(5):
| 表長m | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1000 |
| 模p | 7 | 13 | 31 | 61 | 127 | 251 | 503 | 997 |
由于除留余數(shù)法的地址計(jì)算方法簡單,而且在許多情況下效果較好。[2]↑
例9,公司有236個(gè)員工,而員工編號(hào)介于1000到9999,除留余數(shù)法就是員工編號(hào)除以數(shù)據(jù)個(gè)數(shù)236后,去余數(shù)即為數(shù)據(jù)的位置。編號(hào)5428員工的數(shù)據(jù)(編號(hào)5428除以236取余數(shù)得0)放數(shù)據(jù)中的第一筆,編號(hào)3512員工數(shù)據(jù)(編號(hào)3512除以236取余數(shù)得8)放數(shù)據(jù)中的第九筆…依次類推。
?
轉(zhuǎn)載于:https://www.cnblogs.com/claudia529/p/11107746.html
總結(jié)
以上是生活随笔為你收集整理的哈希函数 直接定址法 除留余数法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年小米产业链研究报告
- 下一篇: 留数的计算