雜湊與多級雜湊

2021-06-22 04:49:23 字數 947 閱讀 8910

最近接觸到的專案有用到多級雜湊做快取,趁現在有時間,學習並總結一下雜湊方面的知識。

一、雜湊。

使用:1.雜湊值計算方法。 2 比較與匹配方法。

解決衝突的好方法:

1.開鏈法,用鍊錶儲存衝突值。

2.開放位址法,用桶的概念,每個桶存k個元素。衝突的放在這相鄰的元素裡。  優點是快(緩衝中相鄰位址命中率高),缺點是有可能衝突太多存不了。

stl中的hash_map好像是用方法2實現的。。(使用時一定要構建足夠的桶數量。)

二、多級雜湊

特點:1.二維陣列的方式,每一行的個數都是素數。且數量逐行減少。

2.每個桶只存乙個元素,用一維陣列來具體實現二維的感覺。

3.衝突處理簡單,逐行往下處理。

4.實現簡單,擴充套件性強,當無法插入資料時,只需要繼續增加階數即可。

5.查詢快速,空間利用率高。

6. 支援無鎖安全高併發。(兩個執行緒在競爭同乙個位置時,誰先通過原子操作往裡修改標誌位並返成功即占有位置,返回失敗的往下一層走,不需要鎖)

7.當資料插入不了的時候,只能通過增加桶數,同時增加一階(前面的不變)。

使用:(什麼地方經常使用這個表示還不甚明白~~)

1.多級雜湊用於需要快速查詢、資料多的情況。 比如伺服器資料快取。

2.資料一般是定長的情況。

優化:(導師剛剛指導的,趕緊先記錄下來)

1.空間優化。(時間換空間)

一般情況,當n階都插入失敗時,資料不能插入。 

優化方法,每一階試探時,若插入不進,可以與此階此位置的資料進行交換,增加命中的機會。

若4級雜湊,abcde在每一層的雜湊值都相同。對應在每一層插入了abcd,插入e的時候,一般方法是失敗。可以變成ebcd,再讓a去往其它層儲存。

2.時間優化。(空間換時間)

優化方法,每次插入或者匹配時,如果插入或匹配失敗,依次管理同一行的後三個元素,位址相差為一,快取命中高。 

雜湊雜湊雜湊雜湊

雜湊,是解決字串 實際上是各種類 問題的重要工具,講字串儲存讀取速度降低到了線性,雜湊的用法十分豐富,可以用了進行狀態壓縮等。include include include includeusing namespace std 這與jdk string.hashcode 的函式在足夠大的資料下失配率...

雜湊衝突 閉雜湊與開雜湊

閉雜湊 也叫開放定址法,當發生雜湊衝突時,如果雜湊表未被裝滿,說明在雜湊表中必然還有空位置,那麼可以把key存放到衝突位置中的 下乙個 空位置中去。include using namespace std 雜湊表每個空間給個標記 empty此位置空,exist此位置已經有元素,delete元素已經刪除...

雜湊表與雜湊函式

雜湊表 我們將任意型別元素轉換為整型的過程叫作雜湊。所謂雜湊,實質上是高維空間向低維空間的對映。高維度空間元素數量多,低維空間元素數量少,必定會出現多對一的對映,所以必然出現雜湊衝突。在設計雜湊函式的過程要針對狀態數來進行分析。雜湊函式的本質在做雜湊,處理雜湊碰撞。設計雜湊表應當注重以下兩點 設計雜...