雜湊表 學習

2022-09-14 04:18:15 字數 1189 閱讀 3725

看了幾篇文章,主要意思就是用簡單的值index,去索引複雜的值key,進而找到想要的值value.

雜湊演算法主旨:index  = f(key)

資料存放格式:(key.value)

但是存在問題是,

1.雜湊演算法使不同的key產生相同的index

2.分配給雜湊表的記憶體滿了之後,整個雜湊表的遷移太累贅了。

針對第乙個問題,下面介紹兩個方案:

拉鍊法:

相同index的鍵值對,就用鍊錶往後去儲存。

雜湊桶:

首先雜湊桶的個數是固定的,有使用者構建的時候輸入,一旦構建,個數就已經固定;查詢的時候首先將key值通過雜湊函式獲取雜湊值,根據雜湊值獲取到對應的雜湊桶,然後遍歷雜湊桶內的pairs陣列獲取;

這兩種實現方法看似比較類似,但也有差異:

基於雜湊桶的情況下,由於hash桶容量的限制,所以,有可能發生hash表填不滿的情況,也就是,雖然hash表裡面還有空位,但是新建的表項由於衝突過多,而不能裝入hash表中。不過,這樣的實現也有其好處,就是查表的最大開銷是可以確定的,因為最多處理的衝突數是確定的,所以演算法的時間複雜度為o(1)+o(m),其中m為hash桶容量。

而另一種通過鍊錶的實現,由於hash桶的容量是無限的,因此,只要沒有超出hash表的最大容量,就能夠容納新建的表項。但是,一旦發生了hash衝突嚴重的情況,就會造成hash桶的鍊錶過長,大大降低查詢效率。在最壞的情況下,時間複雜度退化為o(n),其中n為hash表的總容量。當然,這種情況的概率小之又小,幾乎是可以忽略的。

比較好的**:

學習雜湊表

雜貨店商品對應的 舉例 簡單查詢就是拿出商品價目本,這個價目本並不是有序的,顧客問蘋果多少錢,需要乙個乙個去查詢某乙個商品的 需要o n 時間。同樣是乙個價目本,但是按商品名稱字母排序的,這樣需要的時候更短為o logn 但這樣我還是覺得查詢太慢,怎麼辦,這時候需要一名能記住所有商品 的員工,這樣一...

雜湊表學習總結

1.雜湊函式 雜湊函式可能會將兩個以上的的關鍵字對映到同乙個位址上,稱這種情況為衝突。應注意任何設計出來的雜湊函式都不能避免衝突 2.雜湊函式的構造方法 直接定址法 適用於關鍵字的分布基本連續的情況 除留餘數法 最簡單,最常用的情況 數字分析法 適用於已知的關鍵字集合,若更換了關鍵字,則需要重新構造...

學習筆記 雜湊表

最近開始把之前欠的noip基礎知識點刷一下 2333其實我的作業還沒有寫完 做到雜湊表的時候,我有點懵,顯然前幾次講課的時候我沒有聽 於是lbmttw lx就開始在網上學習了 啊啊啊 沙雕橘貓真心可愛,愛了愛了 發現其實hash表是個比較有趣的東西 一種典型的空間換時間的資料結構,也叫雜湊表 時間複...