我正在編寫一個程序,它會生成四個無符號的32位整數作爲某個函數的輸出。我想散列這四個整數,所以我可以將這個函數的輸出與未來的輸出進行比較。四個無符號整數的散列函數(C++)
雖然寫了一個像樣的哈希函數,但我遇到了麻煩。當我最初編寫這段代碼時,我簡單地添加了四個整數中的每一個,我知道這些不足。我嘗試了其他一些技巧,比如移動和添加,但都無濟於事。我得到了一個散列,但質量很差,並且該函數產生了大量的衝突。
散列輸出可以是32位或64位整數。這個函數產生了數十億個哈希,所以碰撞在這裏是一個真正的問題,我願意使用一個更大的變量來確保儘可能少的碰撞。
任何人都可以幫我弄清楚如何編寫一個高質量的散列函數?
「我想散列這四個整數,所以我可以將此函數的輸出與未來的輸出進行比較。」不一定遵循。如果你正在測試一個輸出字符串的函數,你不必爲了做迴歸測試而散列到32或64位。在你的情況下,你爲了節省50%的存儲空間而讓自己頭痛(假設你使用64位而不是128位)。這值得麼?你有嘗試過使用gzip嗎? – 2009-11-30 15:16:00
您是否考慮過使用以下一種或多種通用哈希函數:http://www.partow.net/programming/hashfunctions/index.html – 2009-12-19 07:29:32