雜湊表:Hash table
阿新 • • 發佈:2019-01-05
雜湊表
1、什麼是雜湊表
對於陣列,我們可以通過下標直接進行訪問,這種訪問的速度很快,例如通過關鍵字key(1,2,...m)來定位其對應的元素data[1,2,...m]。假設可以用的記憶體很大而且關鍵字的全集(1,2,3,...m,...,2m)又不是很大,那麼可以為每個元素分配一個記憶體空間,也就可以利用這種直接定址的方法快速的訪問元素。在直接定址方式下,具有關鍵字key的元素被直接存放在索引為key的記憶體中。 但在平常的使用過程中,常用的關鍵字(1,2,3,...m)只是其全集(1,2,3,...,m,...)的一部分且全集有時候非常大,如果為關鍵字全集賦予一個空間這大大浪費了資源甚至有時候是不可能的。當所使用的關鍵字集合K比起關鍵字域U要小很多,那麼可以設計一種方式,將很”零散“分佈在整個關鍵字域中通過一個轉換,使其變得”緊緻“一些。這個過程有點類似於空間變換,假想在一個矩形上的點沿著一邊做投影,(假設投影不重合)只需要在邊上搜搜就能找到對應的點而不是在整個平面中去找。或者可以想象用凸透鏡聚光,聚光前和聚光後,光線所佔的面積是不是變小了?! 因此,這種對映關係就變得很關鍵,它能將本來需要很多空間來構成的關鍵字表大大減小,這樣經過對映之後的表稱之為雜湊表或者散列表。這種對映稱之為雜湊函式或者雜湊函式。2、雜湊函式
1)直接地址法 取關鍵詞的某個線性函式值為雜湊地址 h(key) = a*key+b
2)除法雜湊法
h(key) = key mod m
此種方法對m的選擇是有要求的,一個不好的m很容易影響雜湊效果,一般不選擇2的n次方,取素數。
3) 乘法雜湊法
h(key) = floor(m(key*A mod 1)) (0<A<1)
此種方法對m的選擇沒什麼要求,一般選擇2的n次方。
4)數字分析法
分析數字關鍵字在各個位上的變化情況,取比較隨機的位作為雜湊地址。 ......