Будет ли эта хеш-функция конфликтовать необычно часто?

У меня был следующий код для генерации хэша объекта:

public int GetHashCode(MyType obj)
{
   return (obj.Prop1.GetHashCode() + obj.Prop2.GetHashCode() + obj.Prop3.GetHashCode()).GetHashCode();
}

То есть. Я добавляю хеш-коды всех свойств, а затем беру хеш-коды.

В обзоре коллега предположил, что это будет конфликтовать слишком часто. Я не уверен, что это правда, потому что:

  1. Учитывая, что хэш-коды выбираются с равной частотой среди положительных и отрицательных чисел и они повторяются, я не думаю, что мы получаем какую-либо дополнительную информацию о вероятности этих чисел 'сумма в противоположность самим числам
  2. В той степени, в которой их сумма не случайна, хэш-коды предназначены для превращения чисел, которые "близко друг к другу", "далеко друг от друга", таким образом, подача неравномерно распределенного значения в функцию не должно быть проблемой

Кто прав?

Это на C #, если ответ зависит от языка.

5
задан Xodarap 8 June 2011 в 21:57
поделиться