雜湊表查詢又稱雜湊表查詢,通過查詢關鍵字不需要比較就可以獲得需要記錄的儲存位置,它是通過在記錄的儲存位置和它的關鍵字之間建立的乙個確定的關係f,使得每個關鍵字key對應乙個儲存位置f(key)。即:
–儲存位置=f(關鍵字),其中f為雜湊函式。
雜湊表最適合的求解問題是查詢與給定值相等的記錄。
雜湊查詢不適合同樣的關鍵字對應多條記錄的情況,如使用關鍵字"男"去找找某個同學。
不適合範圍查詢,比如查詢班級18~22歲的同學。
怎麼樣的才算是好的雜湊函式?
1、計算簡單。雜湊函式的計算時間(指的是產生位址的時間),不應該超過其他查詢技術與關鍵字比較的時間。
2、位址分布均勻。盡量讓雜湊位址均勻分布在儲存空間中,這樣可以使空間有效的利用。
(1)直接定址法我們可以去關鍵字的某個線性函式的值作為雜湊位址,如下圖所示
這種雜湊函式優點是比較簡單、勻稱,也不會產生衝突,但是需要實現知道關鍵字的分布情況,適合查詢表比較小且連續的情況。在實際中不常用。
(2)數字分析法
通常適用於處理關鍵字位數比較大的情況,如果事先知道關鍵字的分布且關鍵字的若干位分布均勻,就可以考慮用這種方法。
(3)除留餘數法
這是最為常用的構造雜湊函式的方法,對於雜湊表長度為m的雜湊表函式為:
mod是取模(求餘數)的意思。事實上,如果p選得不好,就很多容易出現同義衝突的情況:
如上圖所示,選擇p = 11,就會出現key = 12、144的衝突。
根據經驗,若雜湊表表長為m,
通常p為小於或者等於表長的最小質數或不包含小於20質因子的合數。
(質數又稱素數。是乙個大於1的自然數,並且因數只有1和它自身,
不能整除其他自然數。合數則因數除了1和本身還有其他因數的數。)
從剛才的除留餘數法可以看出,設計再好的雜湊函式也不可能完全避免衝突(key1!=key2,但是f(key1 = f(key2))),下面介紹幾種常用的避免衝突方法。
(1)開放定址法該方法是一旦發生衝突,就去尋找下乙個空的雜湊表位址,只要雜湊表足夠大,空的雜湊位址總能找到,並將其記錄存入。
二次探測法:
增加平方項,主要是為了不讓關鍵字都集中在某一塊區域,避免不同的關鍵字爭奪乙個位址的情況。
隨機探測法:
di使用隨機函式計算而來,是前面方法的改進。
(2)鏈位址法
如上圖所示,取12位除數,進行除留餘數法,無論存在多少衝突,都只是在當前位置給單鏈表增加節點而已。
如上圖所示,取12為除數,進行除留餘數法,無論存在多少衝突,都只是在當前位置給單鏈表增加節點而已。
詳解雜湊表查詢
雜湊表查詢又叫雜湊表查詢,通過查詢關鍵字不需要比較就可以獲得需要記錄的儲存位置,它是通過在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 即 儲存位置 f 關鍵字 其中f為雜湊函式。1 雜湊表最適合的求解問題是查詢與給定值相等的記錄。2 雜湊查...
查詢 雜湊表查詢(雜湊表)
1 雜湊表查詢定義 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查詢集合中存在這個記錄,則必定在f key 的位置上。採用雜湊技術將記錄儲存在一塊連續的儲存空間中...
雜湊表(雜湊表)查詢
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立起乙個確定的對應關係f,使每個關鍵字key對應乙個儲存位置f key f為雜湊函式,又稱雜湊函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間成為雜湊表 雜湊表。直接用key值的某個線性函式當位址。f key a key b 簡單,不...