雜湊查詢是通過計算資料元素的儲存位址進行查詢的一種方法,是一種以 鍵-值(key-indexed) 儲存資料的結構,我們只要輸入待查詢的值即key,即可查詢到其對應的值。
雜湊表查詢又叫雜湊表查詢,通過查詢關鍵字不需要比較就可以獲得需要記錄的儲存位置,它是通過在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個 key 對應乙個儲存位置 f(key)。若查詢集合中存在這個記錄,則必定在 f(key) 的位置上。
雜湊查詢的操作步驟:
⑴用給定的雜湊函式構造雜湊表;
⑵根據選擇的衝突處理方法解決位址衝突;
⑶在雜湊表的基礎上執行雜湊查詢。
怎麼樣的才算是好的雜湊函式?
1、計算簡單,雜湊函式的計算時間(指的是產生位址的時間),不應該超過其他查詢技術與關鍵字比較的時間。
2、 位址分布均勻,盡量讓雜湊位址均勻分布在儲存空間中,這樣可以使空間有效的利用。
1、直接定址法
這種方法的優點是:簡單,均勻,不會產生衝突。但是需要事先知道 key 的分布情況,適合查詢表較小並且連續的情況。
2、數字分析法
比如我們的11位手機號碼「136***x5889」,其中前三位是接入號,一般對應不同運營公司的子品牌,如130是聯通如意 通,136是移動神州行等等。中間四位表示歸屬地。最後四位才是使用者號。
若我們現在要儲存某家公司員工登記表,如果用手機號碼作為 key,那麼極有可能前7位都是相同的,所以我們選擇最後 四位作為 f(key) 就是不錯的選擇。
3、平方取中法
故名思義,比如 key 是1234,那麼它的平方就是1522756,再抽取中間的3位就是227作為 f(key) 。
4、摺疊法
摺疊法是將 key 從左到右分割成位數相等的幾個部分(最後一部分位數不夠可以短些),然後將這幾部分疊加求和,並按 雜湊表的表長,取後幾位作為 f(key) 。
比如:我們的 key 是 9876543210,雜湊表的表長為3位,我們將 key 分為4組,987|654|321|0 ,然後將它們疊加求和 987+654+321+0=1962,再取後3位即得到 f(key) = 962 。
5、除留餘數法
這種方法是最常用的雜湊函式構造方法。
事實上,如果p選得不好,就很容易出現同義衝突的情況:
如上圖所示,選擇p=11,就會出現key=12、144的衝突。
若雜湊表表長為m,通常p為小於或者等於表長的最小質數或不包含小於20質因子的合數。
6、隨機數法
這裡 random 是隨機函式,當 key 的長度不等時,採用這種方法比較合適。
影響雜湊查詢效率的乙個重要因素是雜湊函式本身。當兩個不同的資料元素的雜湊值相同時,就會發生衝突。為減少發生衝突的可能性,雜湊函式應該將資料盡可能分散地對映到雜湊表的每乙個表項中。解決衝突的方法有以下兩種:
1、開放定址法:
如果兩個資料元素的雜湊值相同,則在雜湊表中為後插入的資料元素另外選擇乙個表項。
當程式查詢雜湊表時,如果沒有在第乙個對應的雜湊表項中找到符合查詢要求的資料元素,程式就會繼續往後查詢,直到找到乙個符合查詢要求的資料元素,或者遇到乙個空的表項。容易造成衝突的堆積。
將雜湊值相同的資料元素存放在乙個鍊錶中,在查詢雜湊表的過程中,當查詢到這個鍊錶時,必須採用線性查詢方法。這樣的好處是,不怕衝突多;缺點是降低了雜湊結構的隨機儲存效能。本質是用單鏈表結構輔助雜湊結構的不足。
七大查詢演算法之有序表查詢 斐波那契查詢
比例又稱 分割,是指事物各部分間一定的數學比例關係,即將整體一分為二,較大部分與較小部分之比等於整體與較大部分之比,其比值約為1 0.618或1.618 1。斐波那契查詢也是二分查詢的一種提公升演算法,通過運用 比例的概念在數列中選擇查詢點進行查詢,提高查詢效率。同樣地,斐波那契查詢也屬於一種有序查...
資料結構之查詢(七) 雜湊表查詢(雜湊表)
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應 乙個儲存位置f key 即儲存位置 f 關鍵字 我們把這種對應關係f稱為雜湊函式,又稱為雜湊 hash 函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表 hash ta...
查詢演算法 雜湊演算法,雜湊表查詢
那麼問題來了,如果集合s中同時存在值k 16和值k 27,我們該如何將兩個位址一樣的值存入雜湊表呢?常用的雜湊函式 處理衝突的方法 2.連位址法 雜湊表涉及的是一種對映關係,可以根據某個值查詢到關鍵字的位址,這樣的做法省去了比較的時間,優化了演算法。雜湊表是把值 關鍵字 存到跟它具有 唯一 對映的格...