雜湊表作用的通俗理解

2021-06-18 05:15:03 字數 1460 閱讀 4002

先來了解一下

hash

的基本思路:

設要儲存物件的個數為

num,

那麼我們就用

len個記憶體單元來儲存它們

(len>=num);

以每個物件

ki的關鍵字為自變數,用乙個函式

h(ki)

來對映出

ki的記憶體位址,也就是

ki的下標,將

ki物件的元素內容全部存入這個位址中就行了。這個就是

hash

的基本思路。

hash

為什麼這麼想呢?換言之,為什麼要用乙個函式來對映出它們的位址單元呢?

this is a good question.

明白了這個問題,

hash

不再是問題。下面我就通俗易懂地向你來解答一下這個問題。

現在我要儲存

4個元素

13 7 14 11

顯然,我們可以用陣列來存。也就是:

a[1] = 13; a[2] = 7; a[3] = 14; a[4] = 11;

當然,我們也可以用

hash

來存。下面給出乙個簡單的

hash

儲存:

先來確定那個函式。我們就用

h(ki) = ki%5;(

這個函式不用糾結,我們現在的目的是了解為什麼要有這麼乙個函式)。

對於第乙個元素

h(13) = 13%5 = 3;

也就是說

13的下標為3;即

hash[3] = 13;

對於第二個元素

h(7) = 7 % 5 = 2;

也就是說

7的下標為

2; 即

hash[2] = 7;

同理,hash[4] = 14; hash[1] = 11;

好了,存現在是存好了。但是,這並沒有體現出

hash

的妙處,也沒有回答剛才的問題。下面就來揭開它神秘的面紗吧。

現在我要你查詢

11這個元素是否存在。你會怎麼做呢?當然,對於陣列來說,那是相當的簡單,乙個

for迴圈就可以了。

也就是說我們要找4次。

下面我們來用

hash

找一下。

首先,我們將要找的元素

11代入剛才的函式中來對映出它所在的位址單元。也就是

h(11) = 11%5 = 1

了。下面我們來比較一下

hash[1]?=11,

這個問題就很簡單了。也就是說我們就找了

1次。這個就是

hash

的妙處了。至此,剛才的問題也就得到了解答。至此,你也就徹底的明白了

hash了。

至於hash

衝突的處理,這裡就不再講了。有一句俗話說得好:

「師傅領進門,修行靠個人

」,到這裡文章也就結束了。

通俗理解「雜湊表」

今天聊聊 雜湊表 雜湊表 主要作用在於高效查詢。在程式設計實現中,常常面臨著兩個問題 儲存和查詢,儲存和查詢的效率往往決定了整個程式的效率。腦補下,你在家裡忘記了指甲刀放在 通常要在你家所有抽屜中順序尋找,直到找到,最差情況下,有n個抽屜,你就要開啟n個抽屜。這種儲存方式叫陣列,查詢方法稱為 遍歷 ...

雜湊表的理解

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

理解雜湊表

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