*8.哈希冲突是什么?以及如何解决哈希冲突
哈希表:又叫散列表。是根據(jù)關鍵碼值而直接進行訪問的數(shù)據(jù)結(jié)構(gòu)哈希表一個映射表,就是通過哈希函數(shù)算法,有的一個多對一的映射。
那哈希表有什么用呢?
很明顯能加快查找速度。舉個例子,你在查字典的時候,如果不按照索引查,那么你得一頁一頁翻,速度會慢很多。
常用的構(gòu)造散列函數(shù)的方法:
**1.直接尋址法。**H(key)=key 或 H(key) = a * key + b,線性函數(shù),結(jié)果無重復,但是關鍵碼太多。
**2.數(shù)字分析法。**比如說,在一個班里,大家的學號前面部分都一樣,后面不同而已。如果在一個學號表里,你想查找一個學號,如果把學號前幾個數(shù)字來構(gòu)造哈希地址,那么就會出現(xiàn)多對一的情況,也就是我們,那么我們還要再去找哪些是我們想要的,所以效率會變低。而換后面的幾位數(shù)字,不會出現(xiàn)多對一,效率會高。這里的多對一其實就是我們下面要講的哈希沖突。
**3.平方取中法。**如果還是學號是關鍵碼,那么我們把學號平方,然后取結(jié)果中間的幾位作為散列地址。比較常用的一種方法。
**4.折疊法。**如果還是學號是關鍵碼,而且學號是9位數(shù),那么我們可以拆成3組數(shù)字,三個為一組。然后再相加,得出一個結(jié)果作為散列地址。適用于關鍵碼字數(shù)比較多的。
**5.隨機數(shù)法。**選一個隨機函數(shù)。
6.除取余數(shù)法。按照理解就是除一個數(shù),把余數(shù)當做散列地址。模取不大于表長,且接近表長的素數(shù)效果好。
哈希沖突:無限的數(shù)據(jù)被哈希算法計算出的結(jié)果是有限的,即多個數(shù)據(jù)對應同一個計算結(jié)果(多對一)。舉個例子,哈希表就相當于查字典的漢語拼音音節(jié)索引。但是可能會出現(xiàn)一種情況,比如an和ang對應的漢字在同一頁。這就是哈希沖突。
解決哈希沖突的方法:
1.開放尋址法。
①線性探查法;②二次探查法;
2.鏈地址法。
3.再散列法。
4.建立一個公共溢出區(qū)。
總結(jié)
以上是生活随笔為你收集整理的*8.哈希冲突是什么?以及如何解决哈希冲突的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。