資料結構之雜湊表(雜湊表)

2021-09-30 14:46:10 字數 2462 閱讀 6662

今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門

以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。

理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢(hashed search)是基於上述思想的一種查詢方式。

雜湊法又稱為雜湊法、雜湊法或關鍵字位址計算法,是一種重要的儲存方式,又是一種查詢方式。

按雜湊法儲存方式構造的動態查詢表稱為雜湊表(hash table)。雜湊法查詢的核心是雜湊函式,又稱為雜湊函式。

雜湊法查詢的基本思想

雜湊表查詢需要解決好以下兩個問題:

1、如何設計較好的雜湊函式。乙個好的雜湊函式應該計算簡單(加快轉換速度);並且衝突較少,使雜湊函式結果值均勻分布在雜湊表的位址空間中。

2、如何處理衝突

雜湊函式的構造方法

1、直接定址法此法的雜湊函式是線性的,取關鍵字或關鍵字的某個線性函式值為雜湊位址

2、除留餘數法( 最常用)

取關鍵字被某個不大於雜湊表表長m的質數p除后所得餘數為雜湊位址,即對關鍵字進行取餘運算:h( k )=k%p (p<=m)

3、數字分析法

設關鍵字集合中,每個關鍵字均由m位組成,每位上可能有r種不同的符號。數字分析法根據r種不同的符號在各位上的分布情況,選取某幾位,組合成雜湊位址。所選的位應使各種符號在該位上出現的頻率大致相同。(適用於關鍵字集中的集合,且關鍵字是事先知道的)

4、平方取中法

若已知關鍵字為數字,但預先不一定能夠知道關鍵字的全部情況,用數字分析法難以確定哪幾位分布比較均勻,可先求出關鍵字的平方,然後取其中若干位作為雜湊位址。(關鍵字平方後的結果與關鍵字中每一位都相關,故不同關鍵字產生不同雜湊位址的概率較高。

發生衝突是指由關鍵字得到的雜湊位址的位置上已經存有記錄。而處理衝突是為該關鍵字的記錄找到乙個空的雜湊位址。在找空的雜湊位址時,可能還會產生衝突,此時需再找下乙個空的雜湊位址,直到不產生衝突為止。

處理衝突法

1、開放定址法(再雜湊法)分為:線性探測法、二次探測法說白了就是本來的位置已經滿了,此時繼續以當前位置為起點往後尋找到空位,填入。

2、拉鍊法(鏈位址法)

即將同一位址的關鍵字組成鍊錶,放到該位址處

3、建立乙個公共溢位區

將雜湊表分為基本表和溢位錶兩部分,凡是與基本表發生衝突的元素一律填入溢位表

演算法實現(完整版)以除留餘數法分配空間,以線性探測法處理衝突。

效能分析雖然雜湊表時基於計算式的查詢方式但由於衝突的存在,雜湊法仍需進行關鍵字比較,故仍需要用平均查詢長度來評價雜湊法的查詢效能。影響雜湊法中關鍵字的比較次數的因素有三個:雜湊函式、處理衝突的方法、雜湊表的裝填因子。

雜湊表的裝填因子α=表中已記錄數/表長。α可描述雜湊表的裝填狀態程度。α越大,衝突越大;α越小,衝突越小。

總結

資料結構是一門神奇的學科,它的思想很豐富,應用也是相當之廣泛,有時間我將會多多更新其中的實際應用,資料結構就先告一段落了,開始偉大的自學奮鬥模式了。

資料結構之雜湊表查詢 雜湊表

這個知識點不難,話不多說,直接上 如下 1 include stdafx.h 2 include3 define success 1 4 define unsuccess 0 5 define hashsize 12 定義雜湊表長為陣列的長度 6 define nullkey 3276878 usi...

資料結構 雜湊表(雜湊表)hash table

hash table 在計算機中,雜湊表 是 一種實現了關聯陣列 抽象資料型別的資料結構,這種資料結構可以對映 鍵 key 和 值 value 補充 關聯陣列 在電腦科學中,乙個關聯陣列 associative array 對映 map 符號表 symbol table 或者是字典 dictiona...

資料結構 雜湊表 雜湊表 原理

記錄的儲存位置 f 關鍵字 這裡的對應關係f稱為雜湊函式,又稱為雜湊 hash函式 採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表 hash table 雜湊表hashtable key,value 就是把key通過乙個固定的演算法函式既所謂的雜湊函式轉換成乙個整型...