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