線性雜湊 line hash

2021-09-30 10:32:48 字數 2178 閱讀 2836

文章出處:

線性雜湊是一種動態擴充套件雜湊表的方法。

線性雜湊的數學原理:

假定key = 5 、 9 、13

key % 4 = 1

現在我們對8求餘

5 % 8 = 5

9 % 8=1

13 % 8 = 5

由上面的規律可以得出

(任意key) % n = m

(任意key) %2n = m或 (任意key) %2n = m + n

線性雜湊的具體實現:

我們假設初始化的雜湊表如下:

**點桶編號

桶中已儲存的key

溢位key*0

4,8,12

15,926

37,11,15,19, 23

figure1

為了方便敘述,我們作出以下假定:

1:為了使雜湊錶能進行動態的**,我們從桶0開始設定乙個**點。

2:乙個桶的容量為listsize = 5,當桶的容量超出後就從**點開始進行**。

3:hash函式為 h0 = key %4  h1 = key % 8,h1會在**時使用。

4:整個表初始化包含了4個桶,桶號為0-3,並已提前插入了部分的資料。

**過程如下:

現在插入key = 27

1:進行雜湊運算,h0 = 27 % 4 = 3

2:將key = 27插入桶3,但發現桶3已經達到了桶的容量,所以觸發雜湊**

3:由於現在**點處於0桶,所以我們對0桶進行分割。這裡需要注意雖然這裡是3桶滿了,但我們並不會直接從3桶進行分割,而是從分割點進行分割。這裡為什麼這麼做,在下面會進一步介紹。

4:對分割點所指向的桶(桶0)所包含的key採用新的hash函式(h1)進行分割。

對所有key進行新雜湊函式運算後,將產生如下的雜湊表

**點桶編號

桶中已儲存的key

溢位key08

*15,9263

7,11,15,19, 23274

4,12

figure2

5:雖然進行了**,但桶3並不是**點,所以桶3會將多出的key,放於溢位頁.,一直等到桶3進行**。

6:進行**後,將**點向後移動一位。

一次完整的**結束。

key的讀取:

採用h0對key進行計算。

如果算出的桶號小於了**點,表示桶已經進行的**,我們採用h1進行hash運算,算出key所對應的真正的桶號。再從真正的桶裡取出value

如果算出的桶號大於了**點,那麼表示此桶還沒進行**,直接從當前桶進行讀取value。

說明:

1:如果下一次key插入0、1、2、4桶,是不會觸發**。(沒有超出桶的容量)如果是插入桶3,使用者在實現時可以自己設定,可以一旦插入就觸發,也可以等溢位頁達到listsize再觸發新的**。

2:現在0桶被**了,新資料的插入怎麼才能保證沒**的桶能正常工作,已經**的桶能將部分插入到新**的桶呢?

只要**點小於桶的總數,我們依然採用h0函式進行雜湊計算。

如果雜湊結果小於**號,那麼表示這個key所插入的桶已經進行了分割,那麼我就採用h1再次進行雜湊,而h1的雜湊結果就這個key所該插入的桶號。

如果雜湊結果大於**號,那麼表示這個key所插入的桶還沒有進行**。直接插入。

這也是為什麼雖然是桶3的容量不足,但**的桶是**點所指向的桶。如果直接在桶3進行**,那麼當新的key插入的時候就不能正常的判斷哪些桶已經進行了**。

3:如果使用分割點,就具備了無限擴充套件的能力。當分割點移動到最後乙個桶(桶3)。再出現**。那麼分割點就會回到桶0,到這個時候,h0作廢,h1替代h0, h2(key % 16)替代h1。那麼又可以開始動態分割。那個整個初始化狀態就發生了變化。就好像沒有發生過**。那麼上面的規則就可以迴圈使用。

3:線性雜湊的**中是按上面的規則來進行**的。其實我們可以安裝自己的實際情況來進行改動。

假如我們現在希望去掉分割點,一旦哪個桶滿了,馬上對這個桶進行分割。

可以考慮了以下方案:

1:為所有桶增加乙個標誌位。初始化的時候對所有桶的標誌位清空。

2:一旦某個桶滿了,直接對這個桶進行分割,然後將設定標誌位。當新的資料插入的時候,經過雜湊計算(h0)發現這個桶已經**了,那麼就採用新的雜湊函式(h1)來計算**之後的桶號。在讀取資料的時候處理類似。

Linear hashing 線性雜湊表

section 1 問題描述 分布式或並行資料儲存資料結構的設計 1 需要具有良好的擴充套件性 scalability 能夠支援大規模資料儲存 2 不允許在不同資料節點上產生資料分布不均衡的問題,即避免產生 hotspot nodes 3 在儲存資料增加或者縮減的情況下能夠動態的儲存分配空間 在這樣...

線性之雜湊表

資料結構實驗之查詢七 線性之雜湊表 time limit 1000 ms memory limit 65536 kib submit statistic problem description 根據給定的一系列整數關鍵字和素數p,用除留餘數法定義hash函式h key key p,將關鍵字對映到長度...

雜湊 線性探測法

time limit 1 secs,memory limit 256 mb 使用線性探測 法 linear probin g 可以解決雜湊中的衝突問題,其基本思想是 設雜湊函式為 h key d,並且假定雜湊的儲存結構是迴圈陣列 則當衝突發生時 繼續探測 d 1,d 2 直到衝突得到解決 例如,現有...