所謂查詢,其實質就是要確定待查記錄在查詢結構中的儲存位置 ,以往的查詢結構中,查詢記錄和儲存位置之間並沒有確定的關係。
而最理想的情況是不經過任何比較,就能夠得到待查記錄的儲存位置。那就必須在查詢記錄和儲存位置之間建立確定的關係h。使得每個關鍵碼key和唯一的儲存位址h(key)對應起來.這個過程叫對映
這種查詢技術稱為雜湊技術,儲存的連續空間稱為雜湊表 ,將關鍵碼對映為雜湊表中合適的位置上去的函式稱之為雜湊函式,所得到的的儲存位址叫雜湊位址.
但實際情況下兩個不同的關鍵碼可能會對應同乙個雜湊位址,這叫做衝突,這兩個關鍵碼叫做同義詞.
設計雜湊查詢要解決的兩個問題:
①雜湊函式的設計 ②衝突的處理
2.1 設計的基本原則:①計算簡單②函式值分布均勻
1.直接定址法 h(key) = a * key + b (a,b為常數)
特點:不會產生衝突,要提前知道關鍵碼.但實際應用中用的很少.
2.平方取中法: 將數值平方,取中間若干個數值當做儲存位址
特點: 可以事先不知道數值,位數不能太多
應用:有些編譯器中的識別符號的管理
3.除留餘數法 : h(key) = key mod p (最常用)
特點:一般p選取為小於或等於表長的最小素數或者不含小於20質因子的合數
原因解釋:
例如:12可以是3*4。那麼3的倍數,如27,30,33,39,42,45會被對映到3,6,9,3,6,9,即
3的倍數上。
而素數不會有這種問題.
密碼學的乙個基本假定是人類不具備猜測乙個大的隨機數的能力。
1.開放定址法 (閉雜湊表)
線性探測法:衝突了就往後推,直到找到空位.
概念:堆積:非同義詞對同乙個雜湊位址進行爭搶.
二次探測法:步長變為 -1 1 -4 4 -9 9 -16 16 ... -n^2 ,+n^n 好處:分布比較分散
注意的問題:刪除的時候,不能直接刪除,會截斷之後的探測序列.可以採用懶惰標記,被標記的點 往後插入的時候可以直接插入,查詢的時候直接跳過。
2.拉鍊法(開雜湊表)
發生衝突,就引出一條單鍊錶.(稱之為同義詞子表)
複雜度效能的分析:
關鍵碼的比較次數 取決於 衝突的概率
衝突的概率由以下三個因素決定:
①雜湊函式是否均勻
②處理衝突的方法
③填裝因子 :
n代表待插入的關鍵碼,m代表雜湊表的長度,填裝因子 a = n/m. a越大,發生衝突的可能性就越大.
雜湊查詢複雜度:o(1);
①由於開雜湊表可以動態變表長,所以開雜湊表更適用於事先不知道容量的情況.
雜湊表的查詢技術
雜湊函式的構造 直接定址法 除留餘數法 數字分析法 平方取中法 摺疊法 分段疊加法 衝突處理方法 開放定址法 鏈位址法 建立公共溢位區 雜湊表 採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間稱為雜湊表。雜湊函式 將關鍵碼對映為雜湊表中適當儲存位置的函式。雜湊位址 由雜湊函式所得的儲...
雜湊表 Hash雜湊 的查詢技術
雜湊技術 在記錄的儲存位置和它的關鍵碼key之間建立乙個確定的對應關係h,使得每個關鍵字key和唯一的儲存位置h key 相對應。儲存記錄時,根據這個對應關係找到關鍵碼的對映位址,並按此位址儲存該記錄 查詢記錄時,根據這個對應關係找到待查關鍵碼的對映位址,並按此位址訪問該記錄,這種查詢技術就稱為雜湊...
查詢 雜湊表查詢(雜湊表)
1 雜湊表查詢定義 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查詢集合中存在這個記錄,則必定在f key 的位置上。採用雜湊技術將記錄儲存在一塊連續的儲存空間中...