雜湊結構的查詢

2021-09-28 15:02:23 字數 1587 閱讀 2092

雜湊函式:一 個把查詢表中的關鍵字對映成該關鍵字對應的位址的函式,記為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...