Hash雜湊儲存

2021-06-28 17:10:02 字數 2052 閱讀 1975

什麼是雜湊儲存

雜湊儲存,又稱hash儲存,是一種力圖將

資料元素

的儲存

hash

位置與關鍵碼之間建立確定對應關係的查詢技術。

雜湊法儲存的基本思想是:由

節點的關鍵碼值決定節點的儲存位址。雜湊技術除了可以用於查詢外,還可以用於儲存。

雜湊儲存的特點

雜湊是陣列儲存方式的一種發展,相比陣列,雜湊的資料訪問速度要高於陣列,因為可以依據儲存資料的部分內容找到資料在陣列中的儲存位置,進而能夠快速實現資料的訪問,理想的雜湊訪問速度是非常迅速的,而不像在陣列中的遍歷過程,採用儲存陣列中內容的部分元素作為對映函式的輸入,對映函式的輸出就是儲存資料的位置,這樣的訪問速度就省去了遍歷陣列的實現,因此時間複雜度可以認為為o(1),而陣列遍歷的時間複雜度為o(n)。

雜湊是能一種快速實現訪問的儲存方式。通常作為檢索部分的資料項是整形或者字串,當是字串時,字串的數量要遠遠大於陣列的長度,這時候就會有多個字串對映到乙個儲存位置的情況,這就是所謂的衝突問題,而且衝突時肯定存在的,這時候如何實現資料的儲存又是需要解決的。

雜湊儲存的分類

採用鍊錶的形式

目前主要的解決方式有兩大類,第一種採用鍊錶的形式,將所有衝突的資料項採用鍊錶的形式鏈結起來,這樣搜尋資料的複雜度就包含了鍊錶的遍歷問題,特別是當所有的項都鏈結到乙個鍊錶下時,這時候實際上就是遍歷鍊錶,複雜度並不一定有很大的進步,但是這種鍊錶鏈結的方式有很高的填充率。

探測法探測空閒的空間

第二種就是充分利用沒有實現的儲存空間,利用探測法探測空閒的空間,進而實現資料的儲存,目前有三種探測方式:線性探測法、平方探測法,以及雙雜湊法,三種方式中平方探測法運用比較多,但是都存在各種各樣的優缺點,這時候的雜湊搜尋優勢就沒有理想情況下那麼明顯。有時候甚至比遍歷陣列更加的慢。但是確實不失為一種處理方式。

hash儲存中的衝突解決

對映函式可選擇的比較多,其實完全可以定義自己的對映函式,但是有時候為了降低衝突的概率設定了一些比較好的對映函式,比如求和取餘,或者乘以一定的係數再求和取餘等。(具體**可以參見原文)

以上內容來自:

hash的生成演示

設要儲存物件的個數為num, 那麼我們就用len個記憶體單元來儲存它們(len>=num); 以每個物件ki的關鍵字為自變數,用乙個函式h(ki)來對映出ki的記憶體位址,也就是ki的下標,將ki物件的元素內容全部存入這個位址中就行了。這個就是hash的基本思路。

hash為什麼這麼想呢?換言之,為什麼要用乙個函式來對映出它們的位址單元呢?

this is a good question.明白了這個問題,hash不再是問題。下面我就通俗易懂地向你來解答一下這個問題。

現在我要儲存4個元素 13 7 14 11

顯然,我們可以用陣列來存。也就是:a[1] = 13; a[2] = 7; a[3] = 14; a[4] = 11;

當然,我們也可以用hash來存。下面給出乙個簡單的hash儲存:

先來確定那個函式。我們就用h(ki) = ki%5;(這個函式不用糾結,我們現在的目的是了解為什麼要有這麼乙個函式)。

對於第乙個元素 h(13) = 13%5 = 3; 也就是說13的下標為3;即hash[3] = 13;

對於第二個元素 h(7) = 7 % 5 = 2; 也就是說7的下標為2; 即hash[2] = 7;

同理,hash[4] = 14; hash[1] = 11;

好了,存現在是存好了。但是,這並沒有體現出hash的妙處,也沒有回答剛才的問題。下面就來揭開它神秘的面紗吧。

現在我要你查詢11這個元素是否存在。你會怎麼做呢?當然,對於陣列來說,那是相當的簡單,乙個for迴圈就可以了。

也就是說我們要找4次。

下面我們來用hash找一下。

首先,我們將要找的元素11代入剛才的函式中來對映出它所在的位址單元。也就是h(11) = 11%5 = 1 了。下面我們來比較一下hash[1]?=11, 這個問題就很簡單了。也就是說我們就找了1次。這個就是hash的妙處了。至此,剛才的問題也就得到了解答。至此,你也就徹底的明白了hash了。

以上內容來自:

Hash 雜湊 雜湊

hash 一種用於查詢的資料結構 雜湊查詢的前提是已經一定的規則方法建好了雜湊表。基本思想是 關鍵字 位址轉換法 以資料物件的關鍵字為自變數,通過乙個確定的函式關係h,計算出對應的函式值h key 把這個值解釋為資料物件的儲存位址,並按此存放,即儲存位置 h key 關鍵 1.構造好的雜湊函式 2....

雜湊(hash 雜湊表)

可以認為雜湊有著陣列的思想,它將所有的資料段拼成乙個陣列 順序表 進行儲存,通過雜湊函式,可以基本上以o 1 的時間複雜度來查詢和儲存資料。通過資料段中的唯一關鍵字 key 經過某種演算法,得出此資料段在整個雜湊陣列 順序表 中的的下標,然後直接取元素即可。有資料結構如下 資料段 key,value...

Hash和雜湊 雜湊 表

hash又稱為雜湊,是把任意長度的輸入 又叫做預對映pre image 通過雜湊演算法變成固定長度的輸出,該輸出就是雜湊值。hash演算法還有乙個特點,就是很難找到逆向規律。在同一函式下,如果兩個雜湊值是不相同的,那麼這兩個雜湊值的原始輸入也是不同的。hash演算法又被稱為雜湊演算法。雖然被稱為演算...