資料結構 雜湊表

2021-09-16 13:50:13 字數 1294 閱讀 4860

首先什麼是雜湊表?

雜湊表就是乙個有雜湊演算法和衝突處理函式構造出來的資料儲存表。

建立雜湊表的用意:將資料元素中的關鍵字作為雜湊演算法+衝突處理方法的處理物件,得到唯一的儲存位置,這樣在進行查詢的時候,可以方便的通過計算得到資料儲存位址,而不需要像順序表那樣乙個乙個的比較。

怎麼構建雜湊表呢?

常用的構建方法:直接定址法、數字分析法、平方取中法、摺疊法、除留餘數法

直接定製法求位址d = h(key) = key或h(key) = a * key + b;key為資料關鍵字, 通過這樣線性的方法求雜湊位址

數字分析法:比如有5個數:10032185、10034145、10033275、10032415、100326725 這樣的8位資料需要儲存,使用第一種方法就不方便了,對儲存位址要求較大。觀察這幾個數字,前三位都相同,不方便用於區別資料元素,所以取後5位中的幾位,進行構建雜湊表(構建方法:比如選十位百位,作為h(key)中的key,以此來求得資料元素位址),因為它們更加隨機,能更好的分布在儲存空間並能較好減少衝突。

平方取中法:針對像1001、1000、1010、1100、1101的數,因為每一位數不是1就是0,比較缺少隨機性,所以對這類數先進行平方,在將平方得到的數,採用數字分析法進行計算資料元素位址。

摺疊法:有移位疊加和間界疊加。

比如移位疊加:12123151,將數分為三份,每部分最低為對齊12 123 151進行相加得到 286 再進行h(key)計算

間接移位:就好像摺紙一樣 同樣12123151為例,這裡以百位和千位中間為摺痕,得到472(21) 括號中表示「紙」這過來多的部分,然後再將這部分摺疊回去得到484, 再對計算h(484)

除留餘數法: h(key) = key mod p(表長為m, p <= m),p的選擇對衝突出現的次數有較大的影響,通常選p為小於m的最大質數或不包含小於20的質數因子的合數。

知道了構建,那如果遇到衝途怎麼辦?

以下是鍊錶位址法,使用雜湊表指向h(key)相同的鍊錶,如果需要插入,則將數字加在鍊錶後端。此方法比較靈活

開放定址法:hi = (h(key) + di) mod m i = 1, 2, ..., k(k <= m - 1)

di 有三種取法:1,2,3,...m-1,稱線性探測再雜湊 (2)1的平方,負1的平方,2的平法,負2的平方...k <= m / 2 (3)偽隨機序列,稱偽隨機探測再雜湊

資料結構 雜湊表

1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...

資料結構 雜湊表

雜湊表的定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把 關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的 速度。這個對映函式叫做雜湊函式,存放 記錄的陣列叫做雜湊表。雜湊函式的析構方法 餘數法 取關鍵字被某個不大於雜...

資料結構 雜湊表

3 雜湊函式 數字分析法 根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。適用情況 能預先估計出全部關鍵碼的每一位上各種數字出現的頻度,不同的關鍵碼集合需要重新分析。4 雜湊函式 平方取中法 對關鍵碼平方後,按照雜湊表大小,取中間的若干位作為雜湊位址 平方後擷取 適用情況 實現...