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

分享

解決Hash碰撞沖突方法總結(jié)

 liang1234_ 2019-01-27

Hash碰撞沖突

我們知道,對象Hash的前提是實現(xiàn)equals()和hashCode()兩個方法,那么HashCode()的作用就是保證對象返回唯一hash值,但當兩個對象計算值一樣時,這就發(fā)生了碰撞沖突。如下將介紹如何處理沖突,當然其前提是一致性hash。

1.開放地址法

開放地執(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取值可能為偽隨機數(shù)列。稱偽隨機探測再散列。

2.再哈希法

當發(fā)生沖突時,使用第二個、第三個、哈希函數(shù)計算地址,直到無沖突時。缺點:計算時間增加。
比如上面第一次按照姓首字母進行哈希,如果產(chǎn)生沖突可以按照姓字母首字母第二位進行哈希,再沖突,第三位,直到不沖突為止

3.鏈地址法(拉鏈法)

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


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

4.建立一個公共溢出區(qū)

假設(shè)哈希函數(shù)的值域為[0,m-1],則設(shè)向量HashTable[0..m-1]為基本表,另外設(shè)立存儲空間向量OverTable[0..v]用以存儲發(fā)生沖突的記錄。

拉鏈法的優(yōu)缺點:

優(yōu)點:

①拉鏈法處理沖突簡單,且無堆積現(xiàn)象,即非同義詞決不會發(fā)生沖突,因此平均查找長度較短;
②由于拉鏈法中各鏈表上的結(jié)點空間是動態(tài)申請的,故它更適合于造表前無法確定表長的情況;
③開放定址法為減少沖突,要求裝填因子α較小,故當結(jié)點規(guī)模較大時會浪費很多空間。而拉鏈法中可取α≥1,且結(jié)點較大時,拉鏈法中增加的指針域可忽略不計,因此節(jié)省空間;
④在用拉鏈法構(gòu)造的散列表中,刪除結(jié)點的操作易于實現(xiàn)。只要簡單地刪去鏈表上相應(yīng)的結(jié)點即可。而對開放地址法構(gòu)造的散列表,刪除結(jié)點不能簡單地將被刪結(jié) 點的空間置為空,否則將截斷在它之后填人散列表的同義詞結(jié)點的查找路徑。這是因為各種開放地址法中,空地址單元(即開放地址)都是查找失敗的條件。因此在 用開放地址法處理沖突的散列表上執(zhí)行刪除操作,只能在被刪結(jié)點上做刪除標記,而不能真正刪除結(jié)點。

缺點:

指針需要額外的空間,故當結(jié)點規(guī)模較小時,開放定址法較為節(jié)省空間,而若將節(jié)省的指針空間用來擴大散列表的規(guī)模,可使裝填因子變小,這又減少了開放定址法中的沖突,從而提高平均查找速度。


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多