雜湊衝突的解決方案

2021-10-22 10:51:17 字數 932 閱讀 9517

雜湊表:

將輸入的資料存放在其經過雜湊函式後得到的位置上

雜湊函式:就是乙個數學變化,將輸入的值經過某種變化後變成另乙個數

hash : 翻譯為「雜湊」,就是把任意長度的輸入,通過雜湊演算法,變成固定長度的輸出,該輸出就是雜湊值。

hash衝突:無論再怎麼變化,輸入空間和輸出空間都是一定的,只要輸入的空間一大於輸出的空間,就一定會出現兩個不同的輸入指向同乙個輸出值的情況,這就是雜湊衝突

解決方法

1、開放位址法:在原位址上用乙個確定的增量不斷探查,直到有空位置

(1)線性探測

按順序決定值時,如果某資料的值已經存在,則在原來值的基礎上往後加乙個單位,直至不發生雜湊衝突。 

(2)再平方探測

按順序決定值時,如果某資料的值已經存在,則在原來值的基礎上先加1的平方個單位,若仍然存在則減1的平方 個單位。隨之是2的平方,3的平方等等。直至不發生雜湊衝突。

(3)偽隨機探測

按順序決定值時,如果某資料已經存在,通過隨機函式隨機生成乙個數,在原來值的基礎上加上隨機數,直至不發生雜湊衝突。

2.鏈式位址法(hashmap的實現):陣列+鍊錶

對於相同的值,使用鍊錶進行連線。使用陣列儲存每乙個鍊錶。

優點:(1)處理衝突簡單,且無堆積現象,即非同義詞決不會發生衝突,因此平均查詢長度較短;

(2)各煉表上的結點空間是動態申請的,故更適合於造表前無法確定表長的情況;

(3)刪除結點的操作易於實現。只要簡單地刪去鍊錶上相應的結點即可。

缺點:指標占用較大空間時,會造成空間浪費,若空間用於增大雜湊表規模進而提高開放位址法的效率。

3.再雜湊法:一直雜湊直到無衝突

對於衝突的雜湊值再次進行雜湊處理,直至沒有雜湊衝突。

4.建立公共溢位區

建立公共溢位區儲存所有雜湊衝突的資料。

雜湊函式的構造方法與衝突解決方案

雜湊函式的構造方法 1.直接定值法 取關鍵字或關鍵字的某個線性函式值為雜湊位址。即h key key或h key a key b,其中a和b為常數 這種雜湊函式叫做自身函式 2.除留餘數法 取關鍵字被數p除后所得的餘數為雜湊位址。即 h key key mod p,p m,m表雜湊表的長度 例 h ...

git pull 衝突 解決方案

step1.在本地倉庫中,更新並合併 git fetch origin git rebase origin 3d planningstep2.依據提示分別開啟衝突的檔案,逐一修改衝突 step3.所有衝突都修改完畢後,提交修改的 git add u git rebase continuestep4....

主鍵衝突的解決方案

現象 高併發場景下,入庫時出現主鍵衝突,此主鍵並非自增主鍵,而是由三個字段組成的聯合主鍵。業務邏輯 新來的資料提取的主鍵在資料庫裡沒有,就直接插入,即執行insert 如果資料庫中存在相同主鍵,則用新的資料更新資料庫中已有的資料,即執行update。場景 多伺服器,多執行緒 目標 實現乙個類似ups...