資料結構之雜湊表

2021-08-05 19:42:38 字數 1035 閱讀 5944

雜湊表和雜湊化有乙個重要的概念是如何把關鍵字轉換成陣列下標,在雜湊表中這個轉換是通過雜湊函式來完成的。比如規定乙個單詞含有4個字元,對於單詞cats,我們採用「冪的連乘」的方式將乙個單詞對映成數字。因為有27個可能的字元,包括空格,所以冪採用27,則cats的數字下標是3*27^3+1*27^2+20*27^1+19*27^0 = 60337.如果規定乙個單詞含有10個字元,則zzzzzzzzzz的陣列下標是乙個非常大的數字,在記憶體中的陣列根本不可能有這麼多的記憶體單元。解決的方式是雜湊**換)化,將乙個非常大的範圍的數字壓縮到可接受的陣列範圍中。比如arrayindex = hugenumber % arraysize;這就是乙個雜湊函式,使用雜湊函式向陣列插入資料之後,這個陣列就被稱為雜湊表。

c)再雜湊法:為了消除原始聚集和二次聚集,可以使用另外的乙個方法:再雜湊法。原始聚集和二次聚集產生的原因是探測序列的步長總是固定的。因此現在需要的一種方法是產生一種依賴關鍵字的探測(步長)序列,而不是每個關鍵字都是一樣的固定步長。具體做法是把關鍵字用不同的雜湊函式再做一遍雜湊化,用這個結果作為步長。對於指定的關鍵字步長在整個探測過程中是不變的,不過不同的關鍵字使用不同的步長。因此,再雜湊法中使用了兩個雜湊函式:乙個用於找到原始位置,另乙個生成步長。例如:

2、鏈位址法

開放位址法中,通過在雜湊表中再尋找乙個空位解決衝突問題。另乙個方法是在雜湊表每個單元中設定鍊錶。某個資料項的關鍵字值還是像通常一樣對映到雜湊表的單元,而資料項本身插入到這個單元的鍊錶中,而不需要在原始的陣列中尋找空位。

另外一種方法類似於鏈位址法,它在雜湊表的每個單元中使用陣列,而不是鍊錶。這樣的陣列有時成為桶。然而,這個方法不如鍊錶有效,因為桶的容量不好選擇。如果容量太小,可能會溢位。如果太大,又浪費空間。鍊錶是動態分配的,所以沒有這個問題。

雜湊函式的目的是得到關鍵字的範圍,把它用一種方式轉換成陣列的下標值。

資料結構之雜湊表(雜湊表)

今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢 hashed search 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...

資料結構之雜湊表

wikipedia上的解釋 下圖示意了雜湊表 hash table 這種資料結構。雜湊表 如上圖所示,首先分配乙個指標陣列,陣列的每個元素是乙個鍊錶的頭指標,每個鍊錶稱為乙個槽 slot 哪個資料應該放入哪個槽中由雜湊函式決定,在這個例子中我們簡單地選取雜湊函式h x x 11,這樣任意資料x都可以...

資料結構之雜湊表

雜湊表 hashtable 也叫雜湊表,是根據關鍵碼值而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,從而加快查詢速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。上面的基本介紹完了,是不是有些蒙 大佬走開 我來 通俗 說一下我的理解,不考慮其他東西,雜湊表...