雜湊函式:一 個把查詢表中的關鍵字對映成該關鍵字對應的位址的函式,記為hash(key)=address。
衝突:雜湊函式可能會把兩個或兩個以上的關鍵字對映到同一位址。
雜湊表:根據關鍵字直接進行訪問的資料結構,對雜湊表的查詢的時間複雜度為o(1)。
雜湊函式的構造:
要求:
①雜湊函式的定義域必須包括所有的要儲存的關鍵字,而值域範圍依賴於雜湊表的大小或位址範圍。
②雜湊函式計算出來的位址應該等概率,均勻的分布在整個位址空間,從而減少衝突的發生。
③雜湊函式應盡可能簡單,能夠在較短時間內計算出關鍵字的位址。
方法:
①直接定址法
取關鍵字的線性函式值作為位址。
h(key)=a*key+b
②除留餘數法
取乙個不大於雜湊表長,但接近它的數字p
h(key)=key % p
③數字分析法
r進製數對於r個數來說,已知的關鍵字序列其中r個數出現的頻率不同,
所以應該選擇分布較為均勻的若干位作為雜湊位址。
④平方取中法
取關鍵字的平方數的中間幾位作為雜湊位址,
適用於關鍵字的每一位都分布不均勻或都小於雜湊位址所需的位數
⑤摺疊法
將關鍵字分割成位數相同的幾部分,然後取這幾部分的疊加和作為雜湊位址。
適用於關鍵字位數很多,且每一位關鍵字數字大小分布均勻。
處理衝突的辦法:
開放定址法:
定義:可存放新表項的空閒位址既向它的同義詞表項開放, 又向它的非同義詞表項開放。
hi=(h(key)+di) % m
①線性探測法:
增量序列di=0的平方,1的平方,- 的1的平方,2的平方…
不能探測雜湊表中所有單元,但是至少能探測到一半的單元。
③再雜湊法:
增量序列= i *h2(key)
最多經過m-1次探測就能遍歷表中所有位置,回到h0位置。
④偽隨機數法:
增量序列= 偽隨機數序列
拉鍊法:
定義:避免衝突,將同義詞儲存在同乙個線性鍊錶中。
適用於經常插入刪除的情況。
雜湊表的查詢效率:
雜湊函式的查詢效率取決於三個因素:雜湊函式、處理衝突的方法和裝填因子。
裝填因子:雜湊表的裝填因子一般記為α,定義為乙個表的裝滿程度,即: 表中記錄數n / 雜湊表長度m
裝填因子越大,發生衝突的可能性越大。
資料結構查詢 雜湊查詢(雜湊查詢)
通常我們查詢資料都是通過乙個乙個地比較來進行,有一種方法,要尋找的資料與其在資料集中的位置存在一種對應的關係,通過這種關係就能找到資料的位置。這個對應關係成為雜湊函式 雜湊函式 因此建立的表為雜湊表 雜湊表 雜湊查詢是關鍵字與在資料集中的位置一一對應,通過這種對應關係能快速地找到資料,雜湊查詢中雜湊...
雜湊查詢 資料結構
假定乙個集合為s 集合長度為n 假定選取的雜湊函式為 h k k m 即用元素的 關鍵字k整除以雜湊表的長度m 假定k和m均為正整數,並且m n 取餘數作為儲存該元素的雜湊位址。h 18 18 13 5 h 75 75 13 10 h 60 60 13 8 h 43 43 13 4 h 54 54 ...
雜湊查詢 資料結構
define crt secure no warnings include iostream include stdlib.h include windows.h include iomanip using namespace std define ok 1 define error 0 defin...