一、哈希值生成
哈希值生成是:通過一定的哈希算法(典型的有MD5,SHA-1等),將一段較長的數(shù)據(jù)映射為較短小的數(shù)據(jù),這段小數(shù)據(jù)就是大數(shù)據(jù)的哈希值。他有這樣一個特點,他是少數(shù)的。
一旦大數(shù)據(jù)發(fā)生了變化,哪怕是一個微小的變化,他的哈希值也會發(fā)生變化。另外一方面,既然是DNA,那就保證了沒有兩個數(shù)據(jù)的哈希值是完全相同的。正是因為這樣的特點,它常常用來判斷兩個文件是否相同。比如,從網(wǎng)絡上下載某個文件,只要把這個文件原來的哈希值同下載后得到的文件的哈希值進行對比,如果相同,則表示兩個文件完全一致,下載過程沒有損壞文件。而如果不一致,則表明下載得到的文件跟原來的文件不同,文件在下載過程中受到了損壞。
延伸閱讀:
二、常用HASH函數(shù)
散列函數(shù)能使對一個數(shù)據(jù)序列的訪問過程更加迅速有效,通過散列函數(shù),數(shù)據(jù)元素將被更快地定位。常用Hash函數(shù)有:
1.直接尋址法。取關鍵字或關鍵字的某個線性函數(shù)值為散列地址。即H(key)=key或H(key) = a·key + b,其中a和b為常數(shù)(這種散列函數(shù)叫做自身函數(shù))
2.數(shù)字分析法。分析一組數(shù)據(jù),比如一組員工的出生年月日,這時我們發(fā)現(xiàn)出生年月日的前幾位數(shù)字大體相同,這樣的話,出現(xiàn)沖突的幾率就會很大,但是我們發(fā)現(xiàn)年月日的后幾位表示月份和具體日期的數(shù)字差別很大,如果用后面的數(shù)字來構成散列地址,則沖突的幾率會明顯降低。因此數(shù)字分析法就是找出數(shù)字的規(guī)律,盡可能利用這些數(shù)據(jù)來構造沖突幾率較低的散列地址。
3.平方取中法。取關鍵字平方后的中間幾位作為散列地址。
4.折疊法。將關鍵字分割成位數(shù)相同的幾部分,最后一部分位數(shù)可以不同,然后取這幾部分的疊加和(去除進位)作為散列地址。
5.隨機數(shù)法。選擇一隨機函數(shù),取關鍵字作為隨機函數(shù)的種子生成隨機值作為散列地址,通常用于關鍵字長度不同的場合。
6.除留余數(shù)法。取關鍵字被某個不大于散列表表長m的數(shù)p除后所得的余數(shù)為散列地址。即 H(key) = key MOD p,p<=m。不僅可以對關鍵字直接取模,也可在折疊、平方取中等運算之后取模。對p的選擇很重要,一般取素數(shù)或m,若p選的不好,容易產(chǎn)生碰撞。