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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是哈希表?什么又是哈希冲突?哈希冲突的解决方法?

發(fā)布時間:2024/1/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是哈希表?什么又是哈希冲突?哈希冲突的解决方法? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先,什么是哈希表?什么又是哈希沖突?

①哈希表是基于數(shù)組的一種存儲方式.它主要由哈希函數(shù)和數(shù)組構(gòu)成。當(dāng)要存儲一個數(shù)據(jù)的時候,首先用一個函數(shù)計算數(shù)據(jù)的地址,然后再將數(shù)據(jù)存進(jìn)指定地址位置的數(shù)組里面。這個函數(shù)就是哈希函數(shù),而這個數(shù)組就是哈希表。
②哈希沖突是指哈希函數(shù)算出來的地址被別的元素占用了,也就是,這個位置有人了。好的哈希函數(shù)會盡量避免哈希沖突。

那么發(fā)生了哈希沖突,要怎么解決呢?

解決哈希沖突有以下幾種方法:

①開放定址法:
這種方法也稱再散列法,其基本思想是:當(dāng)關(guān)鍵字key的哈希地址p=H(key)出現(xiàn)沖突時,以p為基礎(chǔ),產(chǎn)生另一個哈希地址p1,如果p1仍然沖突,再以p為基礎(chǔ),產(chǎn)生另一個哈希地址p2,…,直到找出一個不沖突的哈希地址pi ,將相應(yīng)元素存入其中。這種方法有一個通用的再散列函數(shù)形式:
Hi=(H(key)+di)%m i=1,2,…,n

其中H(key)為哈希函數(shù),m 為表長,di稱為增量序列。增量序列的取值方式不同,相應(yīng)的再散列方式也不同。

②再哈希法:
這種方法是同時構(gòu)造多個不同的哈希函數(shù): Hi=RH1(key) i=1,2,…,k
當(dāng)一個哈希函數(shù)地址還產(chǎn)生沖突時,在計算另一個哈希函數(shù)地址,直到不再發(fā)生沖突為止。

③鏈地址法
這種方法的是將所有哈希地址相同的元素i構(gòu)成一個單鏈表,并將單鏈表的頭指針存在哈希表的第i個單元中,因而查找、插入和刪除主要在單鏈表中進(jìn)行。鏈地址法適用于經(jīng)常進(jìn)行插入和刪除的情況。

④建立公共溢出區(qū)
這種方法就是將哈希表分為基本表和溢出表兩部分,凡是和基本表發(fā)生沖突的元素,一律填入溢出表,比較粗暴。

總結(jié)

以上是生活随笔為你收集整理的什么是哈希表?什么又是哈希冲突?哈希冲突的解决方法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。