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