日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哈希表冲突解决

發布時間:2025/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈希表冲突解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上篇文章哈希查找因何快?我們使用它需要付出什么代價?只是簡單介紹了使用hash所帶來的利與弊。并未涉及hash的技術細節,本文則著重學習一下如何解決哈希編址的沖突問題。
1)沖突是如何產生的?
上文中談到,哈希函數是指如何對關鍵字進行編址的規則,這里的關鍵字的范圍很廣,可視為無限集,如何保證無限集的原數據在編址的時候不會出現重復呢?規則本身無法實現這個目的。舉一個例子,仍然用班級同學做比喻,現有如下同學數據
張三,李四,王五,趙剛,吳露.....
假如我們編址規則為取姓氏中姓的開頭字母在字母表的相對位置作為地址,則會產生如下的哈希表

位置 字母 姓名 ?
0 a ? ?
1 b ? ?
2 c ? ?

...
10??? L???? 李四 ?

...
22 W 王五,吳露 ?
..
25? Z? 張三,趙剛 ?

我們注意到,灰色背景標示的兩行里面,關鍵字王五,吳露被編到了同一個位置,關鍵字張三,趙剛也被編到了同一個位置。老師再拿號來找張三,座位上有兩個人,"你們倆誰是張三?"
2)如何解決沖突問題
既然不能避免沖突,那么如何解決沖突呢,顯然需要附加的步驟。通過這些步驟,以制定更多的規則來管理關鍵字集合,通常的辦法有:
a)開放地址法
開放地執法有一個公式:Hi=(H(key)+di) MOD m i=1,2,...,k(k<=m-1)
其中,m為哈希表的表長。di 是產生沖突的時候的增量序列。如果di值可能為1,2,3,...m-1,稱線性探測再散列。
如果di取1,則每次沖突之后,向后移動1個位置.如果di取值可能為1,-1,2,-2,4,-4,9,-9,16,-16,...k*k,-k*k(k<=m/2)?
稱二次探測再散列。如果di取值可能為偽隨機數列。稱偽隨機探測再散列。仍然以學生排號作為例子,
現有兩名同學,李四,吳用。李四與吳用事先已排好序,現新來一名同學,名字叫王五,對它進行編制
10.. .... 22 .. .. 25
李四.. .... 吳用 .. .. 25
?? ?趙剛未來之前
10.. .. 22 23 25
李四.. ? 吳用 王五 ?
?? ?(a)線性探測再散列對趙剛進行編址,且di=1
10... 20 22 .. 25
李四.. 王五 吳用 ? ?
??? (b)二次探測再散列,且di=-2?
1... 10... 22 .. 25
王五.. 李四.. 吳用 ? ?
?? (c)偽隨機探測再散列,偽隨機序列為:5,3,2 ?

b)再哈希法 ?
當發生沖突時,使用第二個、第三個、哈希函數計算地址,直到無沖突時。缺點:計算時間增加。
比如上面第一次按照姓首字母進行哈希,如果產生沖突可以按照姓字母首字母第二位進行哈希,再沖突,第三位,直到不沖突為止
c)鏈地址法
將所有關鍵字為同義詞的記錄存儲在同一線性鏈表中。如下:

因此這種方法,可以近似的認為是筒子里面套筒子
d.建立一個公共溢出區
假設哈希函數的值域為[0,m-1],則設向量HashTable[0..m-1]為基本表,另外設立存儲空間向量OverTable[0..v]用以存儲發生沖突的記錄。
經過以上方法,基本可以解決掉hash算法沖突的問題。
注:之所以會簡單得介紹了hash,是為了更好的學習lzw算法,學習lzw算法是為了更好的研究gif文件結構,最后,我將詳細的闡述一下gif文件是如何構成的,如何高效操作此種類型文件。

總結

以上是生活随笔為你收集整理的哈希表冲突解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。