国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

如何解決hash沖突

2019-10-29 21:26:02
字體:
來源:轉載
供稿:網友

1)沖突是如何產生的?

  上文中談到,哈希函數是指如何對關鍵字進行編址的規則,這里的關鍵字的范圍很廣,可視為無限集,如何保證無限集的原數據在編址的時候不會出現重復呢?規則本身無法實現這個目的。舉一個例子,仍然用班級同學做比喻,現有如下同學數據
張三,李四,王五,趙剛,吳露.....
假如我們編址規則為取姓氏中姓的開頭字母在字母表的相對位置作為地址,則會產生如下的哈希表

 

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

 

...

 

10    L     李四  

 

...

 

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

 

我們注意到,灰色背景標示的兩行里面,關鍵字王五,吳露被編到了同一個位置,關鍵字張三,趙剛也被編到了同一個位置。老師再拿號來找張三,座位上有兩個人,"你們倆誰是張三?"

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)鏈地址法

將所有關鍵字為同義詞的記錄存儲在同一線性鏈表中。如下:

hash沖突,哈希表,開放地址法,再哈希法,鏈地址法,公共溢出區

因此這種方法,可以近似的認為是筒子里面套筒子

d)建立一個公共溢出區

假設哈希函數的值域為[0,m-1],則設向量HashTable[0..m-1]為基本表,另外設立存儲空間向量OverTable[0..v]用以存儲發生沖突的記錄。
經過以上方法,基本可以解決掉hash算法沖突的問題。

注:之所以會簡單得介紹了hash,是為了更好的學習lzw算法,學習lzw算法是為了更好的研究gif文件結構,最后,我將詳細的闡述一下gif文件是如何構成的,如何高效操作此種類型文件。

以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延长县| 陇川县| 伊春市| 普洱| 滦平县| 杭锦后旗| 邓州市| 缙云县| 台中市| 香格里拉县| 大埔县| 九龙坡区| 松江区| 日照市| 汕头市| 遂溪县| 安阳市| 隆尧县| 晋江市| 开阳县| 突泉县| 新泰市| 大田县| 郎溪县| 屏东县| 内江市| 南阳市| 合作市| 开封市| 呼图壁县| 宁蒗| 武冈市| 石嘴山市| 政和县| 海盐县| 临漳县| 苍南县| 漯河市| 安顺市| 凤庆县| 东乌珠穆沁旗|