算法導論對於除法散列函數的描述。其中涉及到一小點數學問題:算法
k mod m時,m之因此爲素數時爲了使得k在m所在的素數域上保持惟一性(根據歐拉定理和費馬小定理)函數
散列函數: .net
其中m的取值如是描述:設計
應用除法散列法的時候,要避免選擇m的某些值,例如,m不該該爲2 的冪 。(儘可能取素數,而且距離 2^p 比較遠的數值。 )由於若是 m = 2^p (2的p次方),則 H(k) 就是k的p個最低位數字。除非一直各類最低p位的排列形式爲等可能的,不然在設計散列函數的時候,最好考慮關鍵字的全部位。htm
解釋一下:get
若是 m = 2^p (2的p次方),則 H(k) =k Mod m 就等價於 k的低m位與 m 求餘所得的值。例如:m = 8 = 2^3 。那麼,1456 Mod 8 = 2456 Mod 8 = 3456 Mod 8 = 4456 Mod 8 = 456 Mod 8 ………… 若是這樣的話,那麼H(k)重複得機率就會大大的增長了。數學
「除非已知各類最低p位的排列形式爲等可能的」這句話的意思是,若是低位p位在全部k中出現的機率是相同的,那麼就可使用2^p 來做爲散列值。「不然在設計散列函數的時候,最好考慮關鍵字的全部位。」也就是儘可能考慮到全部的位數。ast
但願解釋的可以看懂^^^^^看不懂的只能回家了,不要寫代碼了........view
附:vi
費馬小定理是數論中的一個重要定理,其內容爲: 假如p是質數,且(a,p)=1,那麼 a^(p-1) ≡1(mod p) 假如p是質數,且a,p互質,那麼 a的(p-1)次方除以p的餘數恆等於1。假如p是一個質數的話,則2^(p-1)≡1(mod p)成立(這是費馬小定理的一個特殊狀況)是對的。但反過來,假如2^(p-1)≡1(mod p)成立那麼p是一個質數是不成立的(好比341符合上述條件但不是一個質數)。