Linear hashing 線性雜湊表

2021-06-18 08:22:50 字數 2098 閱讀 8967

section 1:問題描述

分布式或並行資料儲存資料結構的設計:

(1) 需要具有良好的擴充套件性(scalability),能夠支援大規模資料儲存

(2) 不允許在不同資料節點上產生資料分布不均衡的問題,即避免產生「hotspot nodes」.

(3) 在儲存資料增加或者縮減的情況下能夠動態的儲存分配空間

在這樣的條件下,線性雜湊表(basedon linear hashing)是乙個很好的解決方案。

section 2:線性雜湊表概覽

(1) 線性雜湊表使用的是動態雜湊演算法

(2) 每乙個雜湊檔案擁有許多容量為b的桶(bucket)

(3) 使用一系列的雜湊函式hi(k)

(4) 典型的雜湊函式為hi(k) = k mod 2i , i=1,2,3,4,….

(5) 當資料量(key的數目)增長時,使用hi+1替換hi使得舊桶**產生新桶

(6) 當資料量增長時,使得某個桶中包含的資料量大於b,則觸發舊桶**。假設舊桶中的資料是均勻分布的,那麼將會有b/2的資料轉移到新桶

(7)當資料量減少時,不同的桶之間的資料會合併

section3:線性雜湊的數學原理

[1]假定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

section4: 線性雜湊的例項[2]

引數說明:b-桶的容量,i-當前桶的等級(level of buckets),p-指向待**的桶的指標(藍色箭頭所指)。通常情況下,i的取值為所有桶中擁有最低雜湊函式標號的桶所對應的桶號。如桶0、桶1、桶2分別對應的雜湊函式標號為h2、h1和h2,則i=1;p則指向最左邊的擁有最低雜湊函式標號的桶,沿用之前的例子那麼p將指向桶1。

fig 1. 桶0溢位

fig 2. **點p指向桶0

fig 3. 修改雜湊函式,桶0**,依據雜湊函式h1將桶0的部分資料移至桶1,無溢位桶,**點p重定向指向桶0,修改i值為1(下一次**將啟用雜湊函式h2)

fig 4. 新資料依據雜湊函式h1加入桶0和桶1,桶1溢位

fig 5. 桶0**,依據雜湊函式h2將桶0的部分資料移至桶2,桶1溢位**點p指向桶1

fig 6. 新資料仍然依據雜湊函式h1加入桶1

fig 7. 桶1**,依據雜湊函式h2將桶1的部分資料移至桶3,**點p指向桶1

fig 8.無溢位桶,**點p重定向指向桶0,修改i值為2(下一次**將啟用雜湊函式h3)

section 5: key值的讀取

採用hi對key進行運算(注意i的值),

如果計算出的桶號小於或等於當前**點,表示桶已經**,接下來將採用hi+1進行雜湊運算,算出key對應的真正的桶號,從而從該桶中取出對應於key的value;

如果計算出的桶號大於**點,則表示該桶沒有**,直接從該桶中取出對應於key的value。

引用:[1]

[2]

分享到:

線性與非線性

就是變數是一次的就叫做線性,否則就是非線性。不過每個具體問題都不盡相同。1.比如線性函式,就是自變數都是一次的,f x1,x2,xn a0 a1x1 a2x2 anxn 線性 與 非線性 常用於區別函式y f x 對自變數x的依賴關係。線性函式即一次函式,其影象為一條直線。其它函式則為非線性函式,其...

線性特徵與非線性特徵 線性模型與非線性模型

這是個見仁見智的問題,也就是說,它似乎沒有乙個確定的答案,因而我們不糾結於到底把這個模型稱作 線性model or 非線性model 從這麼僵化的論戰裡跳脫出來,好好掰扯一下這個問題 若我們的樣本是線性可分的,那麼我們直接使用線性model就可以解決分類問題,如lr。下圖是lr的決策邊界示意圖 最後...

線性結構 線性表

線性結構 線性表 棧 佇列 串和陣列 線性結構的特點 除了第乙個元素和最後乙個元素外,每個資料元素有乙個前驅和乙個後繼,線性表是最簡單 最基本 最常用的資料結構,它有順序儲存和鏈式儲存兩種儲存方案 線性表是n個資料元素的有限序列,在表中,元素之間存在著線性的邏輯關係 特點 同一性 線性表由同類元素組...