查詢演算法 雜湊演算法,雜湊表查詢

2021-09-12 01:21:43 字數 1283 閱讀 5388

那麼問題來了,如果集合s中同時存在值k=16和值k=27,我們該如何將兩個位址一樣的值存入雜湊表呢?

常用的雜湊函式

處理衝突的方法

2. 連位址法

雜湊表涉及的是一種對映關係,可以根據某個值查詢到關鍵字的位址,這樣的做法省去了比較的時間,優化了演算法。

雜湊表是把值(關鍵字)存到跟它具有「唯一」對映的格仔(某個位址)裡,需要用的時候則可直接取到該值(關鍵字)的值。而這個「唯一」的格仔的位址是根據關鍵字的值確定的,確定這個格仔需要用到雜湊函式。

例如:雜湊函式為(k為關鍵字的值,m為雜湊表長度,h(k)為儲存該值的位址;其中h(k)的範圍在0~m-1之間)

h(k) = k%m

要將集合 s=存入雜湊表中,取m=11,則有:位址值

01257

34516

67408

6391076

h(16)=16%11=5,取出雜湊表中位址為5的值比較即可。

我們將這種情況試做衝突,在建立雜湊表時,應該把解決衝突的方法想好,那麼建立雜湊表的步驟就變成了:

構造「好」的雜湊函式

制定解決衝突的放方法

1. 除留餘數法(m為表長,p為小於m的最大素數)

h(key)=key%p (p<=m)
2. 直接位址法(a,b為常數)
h(key)=a*key%+b
3. 數字分析法(關鍵字位數比位址碼位數多的情況)
將關鍵字排成一列,選取幾列位數當做位址碼,前提是位址碼不會重複
1. 開放定址法(h(key)為原雜湊函式,m為表長,di為探測時的位址增量)

基本思路就是根據該key的值探測雜湊表中其他的空格子儲存衝突的值,設空格子的位址序列為hi

hi = (h(key)+di)%m (i = 1,2,3…,k(k<=m-))
形成探測序列的方法很多,如下:

- 線性探測法:di = 1,2,3…,m=1

- 二次探測法:di = 12,-12,22,-22,…,q2,-q2,(q<=m/2)

- 雙雜湊函式探測法:di = irh(key) (i = 1,2,3,…,m-1) ,此時hi = (h(key)+irh(key))%m

2. 連位址法

基本思路就是在重複的位置建立鍊錶或陣列儲存

演算法 查詢 雜湊表查詢

查詢除了線性表的查詢 順序 二分 分塊 樹上查詢 bst b 樹 還有一種雜湊查詢。相比於前兩種查詢,雜湊表的查詢效率驚人的高o 1 它採用的直接定址技術,基本上就是實現了精準打擊,達到一擊而中的效果。所謂的直接定址技術,說白了,就是儲存記錄時,通過雜湊函式計算出乙個雜湊位址 讀取記錄時,通過同樣的...

《演算法》 查詢 雜湊表

雜湊表也是一種符號表,主要特徵是可以將鍵通過雜湊函式對映為乙個陣列索引,然後利用這個陣列索引就可以做很多東西。當我們輸入乙個物件,不論這是個什麼東西,經過雜湊函式處理之後輸出乙個0到m 1的範圍之內的整數。對於雜湊函式有一些要求 相等的物件 使用equals 函式 的雜湊值是相同的 2.同樣的雜湊值...

查詢演算法(II)雜湊查詢 雜湊表 Hash

雜湊 hash 同順序 鏈結和索引一樣,是儲存集合的又一種方法。不同的是,雜湊表 雜湊表 在元素的儲存位置和它的關鍵字之間建立了乙個對應關係。雜湊儲存的基本思想是 以每個元素的關鍵字k為自變數,通過乙個函式 稱為雜湊函式或雜湊函式 計算出函式值,把這個值 雜湊位址或雜湊位址 解釋為一塊連續儲存空間 ...