什麼是雜湊表?
雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。
關鍵字——雜湊函式(雜湊函式)——雜湊位址
優點:一對一的查詢效率很高;
好的雜湊函式=計算簡單+分布均勻(計算得到的雜湊位址分布均勻)
雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。
優缺點
優點:不論雜湊表中有多少資料,查詢、插入、刪除(有時包括刪除)只需要接近常量的時間即0(1)的時間級。實際上,這只需要幾條機器指令。
雜湊表運算得非常快,在電腦程式中,如果需要在一秒種內查詢上千條記錄通常使用雜湊表(例如拼寫檢查器)雜湊表的速度明顯比樹快,樹的操作通常需要o(n)的時間級。雜湊表不僅速度快,程式設計實現也相對容易。
如果不需要有序遍歷資料,並且可以提前**資料量的大小。那麼雜湊表在速度和易用性方面是無與倫比的。
**缺點:**它是基於陣列的,陣列建立後難於擴充套件,某些雜湊表被基本填滿時,效能下降得非常嚴重,所以程式設計師必須要清楚表中將要儲存多少資料(或者準備好定期地把資料轉移到更大的雜湊表中,這是個費時的過程)
****雜湊衝突
由於雜湊演算法被計算的資料是無限的,而計算後的結果範圍有限,因此總會存在不同的資料經過計算後得到的值相同,這就是雜湊衝突。(兩個不同的資料計算後的結果一樣)
問題
二、如何解決雜湊衝突
1、開放位址法(再雜湊法)
線性探查法
平方探查法
雙雜湊函式探查法
2、鏈位址法(拉鍊法)
3、再雜湊法
4、建立公共溢位區
詳細解釋:
1、開放位址法(前提是雜湊表的長度大於等於所要存放的元素)
發生雜湊衝突後,按照某一次序找到下乙個空閒的單元,把衝突的元素放入。
平方探查法
從發生衝突的單元加上12,22,32,…,n2,直到遇到空閒的單元
雙雜湊函式探查法
定義兩個雜湊函式,分別為s1和s2,s1的演算法和前面一致,s2取乙個1~m-1之間並和m互為素數的數。s2作為步長。
2、鏈位址法
將雜湊值相同的元素構成乙個鍊錶,head放在雜湊表中。一般鍊錶長度超過了8就轉為紅黑樹,長度少於6個就變為鍊錶。
3、再雜湊法
同時構造多個不同的雜湊函式,hi = rhi(key) i= 1,2,3 … k;
當h1 = rh1(key) 發生衝突時,再用h2 = rh2(key) 進行計算,直到衝突不再產生,這種方法不易產生聚集,但是增加了計算時間。
4、建立公共溢位區
雜湊表如何避免雜湊衝突
開放定址法 核心思想是,如果出現了雜湊衝突,我們就重新探測乙個空閒位置,將其插入。1 線性探測 我們就從當前位置開始,依次往後查詢,看是否有空閒位置,直到找到為止。還記得我們剛講的查詢操作嗎?在查詢的時候,一旦我們通過線性探測方法,找到乙個空閒位置,我們就可以認定雜湊表中不存在這個資料。但是,如果這...
雜湊表 雜湊函式 雜湊衝突與解決
雜湊表 通過關鍵碼來對映到值的乙個資料結構 雜湊函式 鍵與值對映的乙個對映關係 常用方法 1 直接定址法 f x kx b k b都是常數 一旦確定了雜湊函式,那麼新增 獲取元素都需要通過這個雜湊函式 2 除留餘數法 f x x k k是常數,k m m為儲存位置長度 其他幾種方法 方法名說明 適合...
雜湊表(雜湊表)及雜湊表處理衝突的方法
前面介紹了靜態查詢表以及動態查詢表中的一些查詢方法,其查詢的過程都無法避免同查詢表中的資料進行比較,查詢演算法的效率很大程度取決於同表中資料的查詢次數。而本節所介紹的雜湊表可以通過關鍵字直接找到資料的儲存位置,不需要進行任何的比較,其查詢的效率相較於前面所介紹的查詢演算法是更高的。在初中的數學課本中...