Как справиться с хеш-коллизиями? - программирование

Как справиться с хеш-коллизиями?

Я разрабатываю игру, где каждая вещь в игровом мире представлена ​​глобальным уникальным идентификатором.

Эти идентификаторы определяют каждый бит 64 бит и генерируются путем объединения времени создания, сетевого адреса машины и случайного числа. Согласно статье Википедии о проблеме День рождения, вероятность столкновения хэшей составляет 0,1% для двухсот миллионов записей.

Поскольку маловероятно, что я собираюсь получить столько записей, можно было бы подумать, что никакой хэш никогда не столкнется. Но я не хочу на это надеяться, но пусть мое приложение обрабатывает редкий случай столкновения с идентификатором, таким образом, столкновение хэшей.

В противном случае поведение было бы очень нежелательным, потому что две независимые вещи в игровом мире имели бы связь, таким образом разделяя их свойства, такие как положение, движение, точки здоровья и т.д.

Как я могу обрабатывать хеш-коллизии? Как обычно они обрабатываются?

4b9b3361

Ответ 1

Обычно хеш-столкновения обрабатываются двумя способами:

  • Используйте большой хеш, так что столкновения практически невозможны.

  • Рассмотрим хеш-коды, которые должны быть неидеальными, и используйте сопоставитель равенства для фактических данных для определения уникальности.

128-битный GUID использует первый метод. Класс HashSet<T> в .NET является примером второго метода.