很容易證明,給定一些具有未知分佈的密鑰集,我們不能構造一個將這些密鑰作爲輸入的函數輸出均勻分佈的值的函數。爲什麼Knuth,CLRS哈希函數不足
因此,我們着眼於未知分佈的通用散列函數。
Knuth建議利用無理數字的非重複數字 - 最值得注意的是黃金比例 - 以便將鍵均勻分佈在表格範圍內。
CLRS建議您簡單地將鑰匙mod作爲一個大的素數,再次將鍵大致均勻分佈在表格範圍內,並分解重複模式。
在這兩種情況下,目標似乎是均勻分配密鑰。但是,在研究諸如Murmur2,SeaHash等解決方案時,他們似乎在確保「蝴蝶狀」效果方面付出了相當大的努力:給定一個鍵,更改任何1位都有很好的機會改變每一個位在散列。
爲什麼這種行爲是可取的?在TAOCP和CLRS中提出的解決方案的缺點是什麼?
如果期望的行爲是分解輸入鍵集合中的任何模式,那麼這裏隱含的假設是,顯示模式類型的鍵集合更可能是瘋狂的?這是否合理?
對不起,如果我不精確。
編輯:不需要具有加密強度。目的是儘量減少碰撞。
在https://cs.stackexchange.com問這個問題可能更好問 – mttrb
這取決於你使用散列函數的目的。如果您想隱藏原始信息(例如密碼),那麼通過觀察兩個哈希的相似性,您最好不能對原始信息做出結論。 – martinstoeckli
@martinstoeckli查看編輯 – jay