雜湊表的簡單理解

2022-06-28 03:15:12 字數 827 閱讀 9119

我們要在陣列或者煉表裡查詢乙個指定得資料,唯一能做得事情就是遍歷的去查詢,這樣的時間複雜度是o(n),那有沒有一種方法可以以o(1)的時間複雜度找到這個資料呢?現在來想這個乙個問題,現實生活中我們的衣物都是分類存放的,放的時候根據是什麼種類的衣物放到指定的地方,取的時候依照要取的衣物種類去指定的地方找,這就是o(1)複雜度的操作,那在程式設計裡怎麼實現放在哪去哪找這個動作呢,雜湊函式就是用來幹這個的,雜湊函式是乙個概念不是乙個指定的函式,實際應用中具體的實現有很多,比如這裡我就把雜湊函式定義為h(x) = x%3,這時候我們要儲存數字4,經過雜湊函式得到1,就把4存在位置為1的地方,找的時候再去位置為1的地方去找。再比如我們要存入5那就是5%3=2,存在位置2。

但是當我們要存入7呢,7%3=1,又要存入1了,4存在位置1,7也存在位置1,那這個位置1到底存的是4還是7呢?

這就是所謂的雜湊衝突,h(x)=h(y),發生衝突在所難免,我們能做的就是就是減少衝突的次數,雜湊函式選的得當,就能減少衝突次數。既然衝突在所難免,那衝突了怎麼辦呢,自然有解決辦法,這裡要說的是鏈位址法,就是存放資料的位置放乙個列表把衝突的資料都放進去。

雜湊表的核心就是雜湊函式和解決衝突的方式,這兩點都是有多種選擇的,具體使用什麼樣的雜湊函式,什麼樣的衝突解決方法都要因情況而定。

雜湊表的簡單理解

雜湊表具有查詢速度快,效率高的優點,是基於陣列,特定情況下結合鍊錶 紅黑樹 的資料結構。設計思路 設想用陣列儲存英文本母a zzzzzzzz的字串,這樣的話總共有26 8種結果,而如果想要查詢字母absdaw就只能通過遍歷陣列,非常影響速度。靈感一閃而過,如果能把每個字母與陣列下標繫結不就能快速查詢...

雜湊表的理解

因為在開發中經常用到hashmap,hashset等集合結構,但是一直對其中的hash的意思不太理解。今天抽空查了一下資料,順便記錄一下現在的理解。事先宣告一下,此文只介紹雜湊表的資料結構,不介紹具體的hash演算法 首先我們不要去想hash表是用來幹嘛的,先以實際問題著手。就是現在需要乙個能夠儲存...

理解雜湊表

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