我有下面的代碼來產生對象的哈希:這個散列函數會異常頻繁地碰撞嗎?
public int GetHashCode(MyType obj)
{
return (obj.Prop1.GetHashCode() + obj.Prop2.GetHashCode() + obj.Prop3.GetHashCode()).GetHashCode();
}
即我添加所有屬性的哈希碼,然後採取這個哈希。
在回顧中,一位同事建議說這會頻繁發生碰撞。我不知道這是正確的,因爲:
- 鑑於散列碼與選擇相同的頻率之間的正數和負數,它們環繞,我不認爲有我們獲得有關可能性的任何其他信息的這些數字的總和與數字本身相反
- 在它們的總和是非隨機的程度上,散列碼被設計爲使得「靠近在一起」的數字變得「相距很遠」,因此饋送非均勻 - 分配給函數的值不應該是個問題
誰是正確的?
它是在C#中,以防答案是特定於語言的。
什麼是你同事的原因是什麼? – 2011-06-08 22:01:12