雜湊表,雜湊衝突

2021-10-06 10:19:56 字數 1427 閱讀 6611

什麼是雜湊表?

雜湊表(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為儲存位置長度 其他幾種方法 方法名說明 適合...

雜湊表(雜湊表)及雜湊表處理衝突的方法

前面介紹了靜態查詢表以及動態查詢表中的一些查詢方法,其查詢的過程都無法避免同查詢表中的資料進行比較,查詢演算法的效率很大程度取決於同表中資料的查詢次數。而本節所介紹的雜湊表可以通過關鍵字直接找到資料的儲存位置,不需要進行任何的比較,其查詢的效率相較於前面所介紹的查詢演算法是更高的。在初中的數學課本中...