雜湊查詢 HashSearch

2022-08-24 03:12:09 字數 1605 閱讀 1998

hash函式就是把任意長的輸入字串變化成固定長的輸出字串的一種函式。

輸出字串的長度稱為hash函式的位數。

雜湊表的長度;關鍵字的長度;關鍵字的分布情況;

雜湊函式的計算簡單,快速;

雜湊函式能將關鍵字集合k均勻地分布在位址集上,使衝突最小。

首先用關鍵字key乘上某個常數a(0 < a < 1),並抽取出key*a的小數部分;然後用m乘以該小數後取整。

注意:該方法最大的優點是m的選取比除餘法要求更低。比如,完全可選擇它是2的整數次冪。雖然該方法對任何a的值都適用,但對某些值效果會更好。knuth建議選取 0.61803……。

注意:這是一種最簡單,也最常用的構造雜湊函式的方法。它不僅可以對關鍵字直接取模(mod),也可在折迭、平方取中等運算之後取模。值得注意的是,在使用除留餘數法時,對p的選擇很重要。一般情況下可以選p為小於表長的最大質數。

選擇乙個隨機函式,取關鍵字的隨機函式值為它的雜湊位址,即 h(key) = random (key);

通常,當關鍵字長度不等時採用此法構造雜湊函式較恰當。

目前應用最為廣泛的hash函式是sha-1和md5演算法,大多是128位和更長。

雜湊一定會存在衝突,所以需要解決衝突的辦法。

位址h0=h(key)發生衝突時,以h0為基礎 ,採取合適方法計算得到另乙個位址h1, 如果h1仍然發生衝突,以h1為基礎再求下乙個位址h2,若h2仍然衝突,再求得h3。依次類推,直至hk不發生衝突為止,則hk為該記錄在表中的雜湊位址。

這種方法在尋找"下乙個"空的雜湊位址時,原來的陣列空間對所有的元素都是開放的,所以稱為開放位址法。通常把尋找"下乙個"空位的過程稱為探測。上述方法可用如下公式表示:

hi = (h(key) +di) % m ; i= 1, 2, …,k(k<=m-1)

其中h(key)稱為雜湊函式,m為表長,di為增量序列;

增量 d 可以有不同的取法,並根據其取法有不同的稱呼:

( 1 ) d i = 1 , 2 , 3 , …… 線性探測;

( 2 ) d i = 1^2 ,- 1^2 , 2^2 ,- 2^2 , k^2, -k^2…… 二次探測;

( 3 ) d i = 偽隨機數 偽隨機探測;

當表中 i, i+ 1, i+2 位置上已填有記錄時,下乙個雜湊位址為i、i+1 、i+2 和i+3 的記錄都將填入i+3 的位置,這種在處理衝突過程中發生的兩個第乙個雜湊位址不同的記錄爭奪同乙個後繼雜湊位址的現象稱作"二次聚集"或稱作"堆積",即在處理同義詞的衝突過程中又新增了非同義詞的衝突。

鏈位址法的基本思想是:把具有相同雜湊位址的記錄放在同乙個單鏈表中,稱為同義詞鍊錶。有 m 個雜湊位址就有 m 個單鏈表,同時用陣列ht[0…m-1]存放各個鍊錶的頭指標,凡是雜湊位址為i的記錄都以結點方式插入到以 ht[i]為頭結點的單鏈表中。

雜湊查詢HashSearch

package search 雜湊查詢 線性探測法 位置 存數 即要存的資料 p p取小於等於長度的最大素數 解決衝突時往下移乙個位置 即 存數 1 p.直至找到位置 能儲存的元素個數 p 補充知識點 1 和 是短路運算子 當第乙個條件為false,不用判斷第二個條件 當第乙個條件為true,不用判...

查詢 雜湊表查詢(雜湊表)

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

資料結構查詢 雜湊查詢(雜湊查詢)

通常我們查詢資料都是通過乙個乙個地比較來進行,有一種方法,要尋找的資料與其在資料集中的位置存在一種對應的關係,通過這種關係就能找到資料的位置。這個對應關係成為雜湊函式 雜湊函式 因此建立的表為雜湊表 雜湊表 雜湊查詢是關鍵字與在資料集中的位置一一對應,通過這種對應關係能快速地找到資料,雜湊查詢中雜湊...