小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

hash的沖突處理

 lihonghao_shzh 2008-03-19
1)沖突是如何產(chǎn)生的?
上文中談到,哈希函數(shù)是指如何對關(guān)鍵字進(jìn)行編址的規(guī)則,這里的關(guān)鍵字的范圍很廣,可視為無限集,如何保證無限集的原數(shù)據(jù)在編址的時候不會出現(xiàn)重復(fù)呢?規(guī)則本身無法實(shí)現(xiàn)這個目的。舉一個例子,仍然用班級同學(xué)做比喻,現(xiàn)有如下同學(xué)數(shù)據(jù)
張三,李四,王五,趙剛,吳露.....
假如我們編址規(guī)則為取姓氏中姓的開頭字母在字母表的相對位置作為地址,則會產(chǎn)生如下的哈希表
位置 字母 姓名
0 a
1 b
2 c
...
10    L     李四

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

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

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

因此這種方法,可以近似的認(rèn)為是筒子里面套筒子
d.建立一個公共溢出區(qū)
假設(shè)哈希函數(shù)的值域?yàn)閇0,m-1],則設(shè)向量HashTable[0..m-1]為基本表,另外設(shè)立存儲空間向量OverTable[0..v]用以存儲發(fā)生沖突的記錄。
經(jīng)過以上方法,基本可以解決掉hash算法沖突的問題。
注:之所以會簡單得介紹了hash,是為了更好的學(xué)習(xí)lzw算法,學(xué)習(xí)lzw算法是為了更好的研究gif文件結(jié)構(gòu)
TPLINK:http://hi.baidu.com/gezhou/blog/item/74e2b034415edcb6d1a2d3e0.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多