雜湊函式的構造:直接定址法、除留餘數法、數字分析法、平方取中法、摺疊法(分段疊加法)
衝突處理方法:開放定址法、鏈位址法、建立公共溢位區
概 述
雜湊的基本思想:在記錄的儲存位址和它的關鍵碼之間建立乙個確定的對應關係。這樣,不經過比較,一次讀取就能得到所查元素的查詢方法。
雜湊表:採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間稱為雜湊表。
雜湊函式:將關鍵碼對映為雜湊表中適當儲存位置的函式。
雜湊位址:由雜湊函式所得的儲存位置址 。
雜湊技術僅僅是一種查詢技術嗎?
雜湊既是一種查詢技術,也是一種儲存技術。
雜湊是一種完整的儲存結構嗎?
雜湊只是通過記錄的關鍵碼定位該記錄,沒有完整地表達記錄之間的邏輯關係,所以,雜湊主要是面向查詢的儲存結構。
雜湊查詢的限制
雜湊技術一般不適用於允許多個記錄有同樣關鍵碼的情況:有衝突,降低了查詢效率,體現不出計算式查詢的優點
雜湊方法也不適用於範圍查詢:不能查詢最大值、最小值,也不可能找到在某一範圍內的記錄。
雜湊技術的關鍵問題:
⑴ 雜湊函式的設計。如何設計乙個簡單、均勻、儲存利用率高的雜湊函式。
⑵ 衝突的處理。如何採取合適的處理衝突方法來解決衝突。
衝突:對於兩個不同關鍵碼ki≠kj,有h(ki)=h(kj),即兩個不同的記錄需要存放在同乙個儲存位置,ki和kj相對於h稱做同義詞。
雜湊函式
設計雜湊函式一般應遵循以下原則:
⑴ 計算簡單。雜湊函式不應該有很大的計算量,否則會降低查詢效率。 ⑵ 函式值即雜湊位址分布均勻。函式值要盡量均勻散布在位址空間,這樣才能保證儲存空間的有效利用並減少衝突。
雜湊函式——直接定址法
雜湊函式是關鍵碼的線性函式,即:
h(key) = a key + b (a,b為常數)
適用情況?
事先知道關鍵碼,關鍵碼集合不是很大且連續性較好。
雜湊函式——除留餘數法
雜湊函式為:h(key)=key mod p
如何選取合適的 p,產生較少同義詞?
一般情況下,選p為小於或等於表長(最好接近表長)的最大素數
適用情況?
除留餘數法是一種最簡單、也是最常用的構造雜湊函式的方法,並且不要求事先知道關鍵碼的分布。
雜湊函式——數字分析法
根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。
適用情況?
事先知道關鍵碼的分布, 關鍵碼的分布均勻
雜湊函式——平方取中法
對關鍵碼平方後,按雜湊表大小,取中間的若干位作為雜湊位址(平方後擷取)。
適用情況?
事先不知道關鍵碼的分布且關鍵碼的位數不是很大。
雜湊函式——摺疊法
將關鍵碼從左到右分割成位數相等的幾部分,將這幾部分疊加求和,取後幾位作為雜湊位址。
適用情況?
關鍵碼位數很多,事先不知道關鍵碼的分布。
衝突的處理
開雜湊方法( open hashing,也稱為拉鍊法,separate chaining ,鏈位址法)
閉雜湊方法( closed hashing,也稱為開位址方法,open addressing ,開放定址法)
建立公共溢位區
處理衝突的方法——開放定址法
由關鍵碼得到的雜湊位址一旦產生了衝突,就去尋找下乙個空的雜湊位址,並將記錄存入。
如何尋找下乙個空的雜湊位址?
(1)線性探測法 (2)二次探測法 (3)隨機探測法 (4)再hash法
用開放定址法處理衝突得到的雜湊表叫閉雜湊表。
線性探測法
當發生衝突時,從衝突位置的下乙個位置起,依次尋找空的雜湊位址。
對於鍵值key,設h(key)=d,閉雜湊表的長度為m,則發生衝突時,尋找下乙個雜湊位址的公式為:
hi=(h(key)+di) % m (di=1,2,…,m-1)
堆積:在處理衝突的過程**現的非同義詞之間對同乙個雜湊位址爭奪的現象。
二次探測法
當發生衝突時,尋找下乙個雜湊位址的公式為:
hi=(h(key)+di)% m (di=12,-12,22,-22,…,q2,-q2且q≤m/2)
隨機探測法
當發生衝突時,下乙個雜湊位址的位移量是乙個隨機數列,即尋找下乙個雜湊位址的公式為:
hi=(h(key)+di)% m (di是乙個隨機數列,i=1,2,……,m-1)
處理衝突的方法——拉鍊法(鏈位址法)
基本思想:將所有雜湊位址相同的記錄,即所有同義詞的記錄儲存在乙個單鏈表中(稱為同義詞子表),在雜湊表中儲存的是所有同義詞子表的頭指標。
用拉鍊法處理衝突構造的雜湊表叫做開雜湊表。
設n個記錄儲存在長度為m的雜湊表中,則同義詞子表的平均長度為n / m。
處理衝突的方法——公共溢位區
基本思想:雜湊表包含基本表和溢位錶兩部分(通常溢位表和基本表的大小相同), 將發生衝突的記錄儲存在溢位表中。 查詢時,對給定值通過雜湊函式計算雜湊位址,先與基本表的相應單元進行比較,若相等,則查詢成功;否則,再到溢位表中進行順序查詢。
雜湊查詢的效能分析
由於衝突的存在,產生衝突後的查詢仍然是給定值與關鍵碼進行比較的過程。
在查詢過程中,關鍵碼的比較次數取決於產生衝突的概率。而影響衝突產生的因素有:
(1)雜湊函式是否均勻
(2)處理衝突的方法
(3)雜湊表的裝載因子:α=表中填入的記錄數/表的長度
幾種不同處理衝突方法的平均查詢長度
手工計算等概率情況下查詢成功的平均查詢長度規則如下:
其中ci為置入每個元素時所需的比較次數。
手工計算等概率情況下查詢不成功的平均查詢長度規則如下
其中ci為函式取值為i時確定查詢不成功時的比較次數。
開雜湊表與閉雜湊表的比較
雜湊表的查詢技術
雜湊函式的構造 直接定址法 除留餘數法 數字分析法 平方取中法 摺疊法 分段疊加法 衝突處理方法 開放定址法 鏈位址法 建立公共溢位區 雜湊表 採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間稱為雜湊表。雜湊函式 將關鍵碼對映為雜湊表中適當儲存位置的函式。雜湊位址 由雜湊函式所得的儲...
雜湊表的查詢技術
所謂查詢,其實質就是要確定待查記錄在查詢結構中的儲存位置 以往的查詢結構中,查詢記錄和儲存位置之間並沒有確定的關係。而最理想的情況是不經過任何比較,就能夠得到待查記錄的儲存位置。那就必須在查詢記錄和儲存位置之間建立確定的關係h。使得每個關鍵碼key和唯一的儲存位址h key 對應起來.這個過程叫對映...
雜湊表 Hash雜湊 的查詢技術
雜湊技術 在記錄的儲存位置和它的關鍵碼key之間建立乙個確定的對應關係h,使得每個關鍵字key和唯一的儲存位置h key 相對應。儲存記錄時,根據這個對應關係找到關鍵碼的對映位址,並按此位址儲存該記錄 查詢記錄時,根據這個對應關係找到待查關鍵碼的對映位址,並按此位址訪問該記錄,這種查詢技術就稱為雜湊...