雜湊表的資料結構
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f(key)。這裡把這種對應關係f稱為雜湊函式,又稱為雜湊(hash)函式。按這個思想,採用雜湊技術將記錄存在在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表。那麼,關鍵字對應的記錄儲存位置稱為雜湊位址。
雜湊表的構造方法
:構造雜湊表的方法是:設要儲存的資料元素個為n,設定乙個長度為m(m≥n)的連續記憶體單元(即陣列),分別以每個資料元素的關鍵字ki(0≤i≤n-1)為自變數,以雜湊函式h(ki)值為該資料元素在陣列中的下標值儲存該資料元素。把構造雜湊表時ki≠kj(i≠j),但h(ki)=h(kj)的現象稱作雜湊衝突。
(1)除留餘數法
除留餘數法是用資料元素的關鍵字k除以雜湊表長度m所得的餘數作為雜湊位址的方法。除留餘數法的雜湊函式h(k0=k mod m。
(2)直接定址法
直接定址法是以資料元素的關鍵字k本身或關鍵字加上某個數值常量c作為雜湊函式的方法。直接定址法的雜湊函式h(k)為h(k) = k + c
(3)數字分析法
數字分析法是取資料元素關鍵字中某些取值較均勻的數字位構造雜湊函式的方法。它只適合於所有關鍵字值已知的情況。
(4)平方取中法
這個方法計算很簡單,假設關鍵字是1234,那麼它的平方就是1522756,再抽取中間的3位就是227,用做雜湊位址。平方取中法比較適合不知道關鍵字的分布,而位數又不是很大的情況。
(5)摺疊法
摺疊法是將關鍵字從左到右分割成位數相等的幾部分(注意最後一部分位數不夠時可以短些),然後將這幾部分疊加求和,並按雜湊表表長,取後幾位作為雜湊位址。
比如關鍵字是9876543210,雜湊表表長為三位,將它分為四組,987|654|321|0,然後將它們疊加求和987 + 654 + 321 + 0 = 1962,再求後3位得到雜湊位址962。
摺疊法事先不需要知道關鍵字的分布,適合關鍵字位數較多的情況。
(5)隨機數法
選擇乙個隨機數,取關鍵字的隨機函式值為它的雜湊位址。也就是f(key) = random(key)。這裡random是隨機函式。當關鍵字的長度不等時,採用這個方法構造雜湊函式是比較合適的。
雜湊衝突解決方法
: (1)
開放定址法
開放定址法是一類以發生雜湊衝突的雜湊位址為自變數、通過某種雜湊衝突函式得到乙個新的空閒的雜湊位址的方法。開放定址法的雜湊衝突函式通常是一組。
主要包括
線性探查法
、平方探查法
和偽隨機數法。
(2)鍊錶法鍊錶法解決雜湊衝突的基本思想是:如果沒有發生雜湊衝突,則直接在該位址儲存該資料元素;如果發生了雜湊衝突,則把發生雜湊衝突的資料元素儲存在另外的單鏈表中。
用鍊錶法解決雜湊衝突通常有兩種方法:
第一種方法是為發生雜湊衝突的不同的同義詞建立不同的單鏈表,
第二種方法是為所有發生雜湊衝突的資料元素建立乙個單鏈表。
第三次作業
2 12有600 mb 兆位元組 的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車這 些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kb s,其結果又如何?解 當傳送速率為2.4k...
第三次作業
1 有600mb 兆位元組 的資料,需要從南京傳送到北京 一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料,試比較這兩種方法的優劣。若資訊傳送的速率為33.6kb s,其結果又如何?解 假定連續傳送且不出錯。若...
第三次作業
p67 2 12 有600mb的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率是2.4kbps 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kbps,其結果又如何?解 1 t 600 1024...