即通過某個函式 f ,使得:
儲存位置 = f ( 關鍵字)這樣我們可以通過查詢關鍵字不需要比較就可獲得需要的記錄的儲存位置。 這就是新的儲存技術——雜湊技術
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係 f,使得每個關鍵字 key 對應乙個儲存位置 f (key)。查詢時,根據這個確定的對應關係找到給定值 key 的對映 f (key) ,若查詢集合中存在的這個記錄,則必定在 f (key) 的位置上。
這裡吧對應關係 f 稱為雜湊函式,又稱為雜湊函式(hash),按這個思想,採用雜湊技術將記錄儲存在一塊連續的儲存空間中。這塊連續儲存空間稱為雜湊表或雜湊表(hash table)。
分兩步:
所以說,雜湊技術不僅是一種儲存技術,還是一種查詢方法。然而它與線性表、樹、圖等結構不同的是,前面幾種結構,資料元素之間都存在某種邏輯關係,可以用連線圖示表示出來,而雜湊技術的記錄之間不存在任何邏輯關係(最大特點),它只與關鍵字有關,因此,雜湊主要是面向查詢的儲存結構。
雜湊技術最適合求解問題是查詢與給定值相等的記錄。對於查詢來說,簡化了比較過程,效率就會大大提高。但雜湊技術不具備很多常規資料結構的能力。
衝突問題 : 我們時常會碰到兩個關鍵字 key1 ≠ key2 ,但是卻有 f(key1 = key2) ,這種現象我們稱為衝突(collision),並把 key1 和 key2稱為這個雜湊函式的同義詞(synonym)。
計算簡單,雜湊函式的計算時間不應該超過其他查詢技術與關鍵字比較的時間(最基本應該滿足的點)
雜湊位址分布均勻 ,既可以保證儲存空間的有效利用,並減少為處理衝突而耗費的時間。
即取關鍵字的某個線性函式值作為雜湊位址。
f (key) = a × key + b (a, b 為常數)如果我們的關鍵字是位數較多的數字。
假如我們現在要儲存某家公司員工登記表,如果用手機號作為關鍵字,那麼極有可能前 7 位都是相同的。那麼我們選擇後面的四位數稱為雜湊位址就是不錯的選擇。如果這樣的抽取工作還是容易出現衝突問題,還可以對抽取出來的數字再進行反轉、右環位移等,總的目的就是為了提供乙個雜湊函式,能夠合理地將關鍵字分配到雜湊表的各個位置。
加粗樣式抽取方法是使用關鍵字的一部分來計算雜湊儲存位置的方法,這在雜湊函式中是常常用到的手段。
數字分析法通常適合處理關鍵字位數比較大的情況,如果事先**知道關鍵字的分布,且關鍵字的若干位分布較均勻,**就可以考慮用這個方法。
這個方法計算很簡單,假設關鍵字是 1234 ,那麼它的平方就是 1522756, 再抽取中間的 3 位就是 227 用作雜湊位址。
摺疊法是將關鍵字從左到右分割成位數相等的幾部分(注意最後一部分位數不夠時可以短些),然後將這幾部分疊加求和,並按雜湊表表長,取後幾位作為雜湊位址。
對於雜湊表長為 m 的雜湊函式公式為:
f(key) = key mod p ( p <= m)
這方法不僅可以對關鍵字直接取模,也可在摺疊、平方取中後再取模。這個方法的關鍵在於選擇適合的 p ,如果 p 選的不好,就可能會容易產生同義詞。
很容易發生衝突。
選擇乙個隨機數,取關鍵字的隨機函式值為它的雜湊位址。也就是 f = random (key) 。這裡 random 是隨機函式。 當關鍵字的長度不等時,採用這個方法構造雜湊函式是比較合適的。
查詢 雜湊表查詢(雜湊表)
1 雜湊表查詢定義 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查詢集合中存在這個記錄,則必定在f key 的位置上。採用雜湊技術將記錄儲存在一塊連續的儲存空間中...
雜湊表(雜湊表)查詢
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立起乙個確定的對應關係f,使每個關鍵字key對應乙個儲存位置f key f為雜湊函式,又稱雜湊函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間成為雜湊表 雜湊表。直接用key值的某個線性函式當位址。f key a key b 簡單,不...
雜湊表 雜湊表 查詢
直接定址法 數字分析法 平方取中法 平方取中法是將關鍵字平方之後取中間若干位數字作為雜湊位址。摺疊法摺疊法是將關鍵字從左到右分割成位數相等的幾部分,然後將這幾部分疊加求和,並按雜湊表表長取後幾體作為雜湊位址。除留餘數法 隨機數法 選擇乙個隨機數,取關鍵字的隨機函式值為它的雜湊位址。即 f key r...