雜湊表如何避免雜湊衝突

2022-08-14 20:00:18 字數 720 閱讀 4803

開放定址法

核心思想是,如果出現了雜湊衝突,我們就重新探測乙個空閒位置,將其插入。

(1) 線性探測:我們就從當前位置開始,依次往後查詢,看是否有空閒位置,直到找到為止。還記得我們剛講的查詢操作嗎?在查詢的時候,一旦我們通過線性探測方法,找到乙個空閒位置,我們就可以認定雜湊表中不存在這個資料。但是,如果這個空閒位置是我們後來刪除的,就會導致原來的查詢演算法失效。本來存在的資料,會被認定為不存在。這個問題如何解決呢?我們可以將刪除的元素,特殊標記為 deleted。當線性探測查詢的時候,遇到標記為 deleted 的空間,並不是停下來,而是繼續往下探測

(2) 二次探測:探測步長不同,二次探測探測的步長就變成了原來的「二次方」,也就是說,它探測的下標序列就是 hash(key)+0,hash(key)+12,hash(key)+22

(3) 雙重雜湊:有衝突就找第二個雜湊函式,再有再加

鍊錶法是一種更加常用的雜湊衝突解決辦法,相比開放定址法,它要簡單很多。在雜湊表中,每個「桶(bucket)」或者「槽(slot)」會對應一條鍊錶,所有雜湊值相同的元素我們都放到相同槽位對應的鍊錶中。

優缺點:

開放定址法:都在陣列裡,序列化簡單,衝突代價高,刪除麻煩,裝載因子不能太大,浪費記憶體空間

鍊錶:記憶體利用率高,儲存小物件的時候,你還要儲存指標,比較消耗記憶體。我總結一下,基於鍊錶的雜湊衝突處理方法比較適合儲存大物件、大資料量的雜湊表,而且,比起開放定址法,它更加靈活,支援更多的優化策略,比如用紅黑樹代替鍊錶。

雜湊表,雜湊衝突

什麼是雜湊表?雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。關鍵字 雜湊函式 雜湊函式 雜湊位址 優點 一對一的查詢...

雜湊表 雜湊函式 雜湊衝突與解決

雜湊表 通過關鍵碼來對映到值的乙個資料結構 雜湊函式 鍵與值對映的乙個對映關係 常用方法 1 直接定址法 f x kx b k b都是常數 一旦確定了雜湊函式,那麼新增 獲取元素都需要通過這個雜湊函式 2 除留餘數法 f x x k k是常數,k m m為儲存位置長度 其他幾種方法 方法名說明 適合...

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

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