演算法筆記 10 雜湊表

2021-09-10 09:40:50 字數 1195 閱讀 1771

雜湊錶用的是陣列支援下標隨機訪問資料的特性,所以雜湊表其實就是陣列的一種擴充套件,由陣列演化而來。通過雜湊函式將元素的鍵值對映為下標,然後將資料儲存在陣列對應下標的位置。我們按照鍵值查詢元素時,我們使用同樣的雜湊函式,將鍵值轉化為陣列下標,從對應的陣列下標位置取資料。

雜湊函式計算得到的雜湊值必須是乙個非負整數

key1 == key2 時,hash(key1) == hash(key2)

key1 != key2 時,hash(key1) != hash(key2)

也正是由於第三點幾乎是不可能完成的,所以會造成雜湊衝突

1.開放定址法

基本思想:如果出現了雜湊衝突,就重新探測乙個空閒位置,將其插入。

過程:以線性探測為例,當我們往雜湊表插入資料,如果某個資料經過 hash 函式後,儲存位置已經被占用,就從當前位置開始,依次往後查詢,看是有空閒位置,直到找到為止。

在有限的空間內,如果查詢到陣列的最後乙個找不到空閒位置,再從開頭向後尋找。

查詢:使用開放定址法進行插入操作,先通過 hash 函式找到查詢元素的鍵值對應的雜湊值,然後比較陣列中下標為雜湊值的元素和要查詢的元素。如果相等,那麼就說明是我們要找的元素;否則就順序往下找。

如果是我們找到的空閒位置是我們通過刪除得到的,我們會將這個位置標記為 deleted,當線性探測時,遇到標記為 deleted 的空間,繼續探測。

問題:當插入資料越來越多的時候,雜湊衝突可能性就越大,空間位置越來越少,線性探測時間越來越長,當刪除和查詢的時候,時間也變長了。

2.鍊錶法

這是一種常用的雜湊衝突解決方法,基本思想是將 hash 函式計算出的雜湊值位置對應一條鍊錶

這種方法,插入和刪除乙個元素的時間複雜度和鍊錶的長度 k 成正比,為 o(k)。

word 文件中單詞拼寫檢查功能如何實現?

將常用英文單詞儲存在乙個雜湊表中,當使用者輸入某個單詞,用單詞到雜湊表中查詢。如果查到,說明拼寫成功;反之,拼寫可能有錯誤,返回提示。

演算法筆記 全域雜湊表

在一般的雜湊表中,有乙個顯著的缺點 無論選擇什麼樣的雜湊函式,總存在一條鍵值輸入序列,這條序列中的每乙個鍵值都會被雜湊對映到同乙個槽中,導致形成的雜湊表只是一條鍊錶,效率較低。首先需要明確,這個問題的產生是由於雜湊函式的確定性,如果雜湊函式是不定的,則可以解決這個問題。由此引入隨機性。設u uu為鍵...

雜湊表與雜湊演算法學習筆記

雜湊表 於陣列具有下標隨機訪問特性,理解這點非常重要。可以說雜湊表是由陣列進化來的。將輸入的鍵通過雜湊函式對映得出的value作為index去table中查詢,這便是雜湊的思想。graph lr a 鍵值key 雜湊函式 b 結果value 我們了解到為什麼雜湊表的查詢複雜度是o 1 因為key v...

雜湊表演算法

雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除 有時包括側除 只需要接近常量的時間即0 1 的時間級。實際上,這只需要幾條機器指令。對雜湊表的使用者一一人來說,這是一瞬間的事。雜湊表運算得非常快,在電腦程式中,...