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個資料元素的有限序列,在表中,元素之間存在著線性的邏輯關係 特點 同一性 線性表由同類元素組...