標籤:style blog http color ar 使用 sp on 2014
演算法導論對於除法散列函數的描述。其中涉及到一小點數學問題:
k mod m時,m之所以為素數時為了使得k在m所在的素數域上保持唯一性(根據歐拉定理和費馬小定理)
散列函數:
H(k) = k Mod m
其中m的取值如是描述:
應用除法散列法的時候,要避免選擇m的某些值,例如,m不應該為2 的冪 。(盡量取素數,並且距離 2^p 比較遠的數值。 )因為如果 m = 2^p (2的p次方),則 H(k) 就是k的p個最低位元字。除非一直各種最低p位的排列形式為等可能的,否則在設計散列函數的時候,最好考慮關鍵字的所有位。
解釋一下:
如果 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 來作為散列值。“否則在設計散列函數的時候,最好考慮關鍵字的所有位。”也就是盡量考慮到所有的位元。
希望解釋的能夠看懂^^^^^看不懂的只能回家了,不要寫代碼了........
附:
費馬小定理是數論中的一個重要定理,其內容為: 假如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符合上述條件但不是一個質數)。
除法散列函數之散列值問題