Самый быстрый способ хэширования набора GUID

StackOverflow https://stackoverflow.com/questions/290645

  •  08-07-2019
  •  | 
  •  

Вопрос

У меня есть список из n идентификаторов GUID, и мне нужно их хэшировать в одно значение. Это значение может быть размером объекта Guid или размером Int32, на самом деле это не имеет значения, но оно должно быть статистически уникальным (скажем, с вероятностью, похожей на MD5).

Таким образом, одним из подходов может быть их сортировка, объединение байтов и получение MD5-хеша всех байтов ... но это не очень быстро.

Еще одна идея: я заметил, что в .NET является довольно стандартной практикой реализовывать метод GetHashCode для составного объекта в качестве XOR хеш-кодов составных объектов. Следовательно, может ли это быть математически разумно для XOR моего списка GUID?

Любые идеи приветствуются!

Это было полезно?

Решение

Если вы хотите, чтобы хэш был действительным для набора (т. е. порядок не имеет значения), тогда XOR-код хеш-кода каждого идентификатора GUID является хорошим выбором.

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

(Обратите внимание, что XOR при использовании хеш-кодов, вероятно, не даст вам того же ответа, что и XOR самих GUID, а затем хэширует результат. Возможно, но это зависит от реализации GUID.GetHashCode (). Я бы хэшировал каждое значение и XOR результаты вместе - кроме всего прочего, это тривиально реализовать.)

Другие советы

Не XOR GUID, а затем хэшируйте результат. Таким образом, вы ничего не получите от простого XOR GUID, если вы не используете хеш, меньший GUID.

Поскольку вы, похоже, действительно заботитесь о производительности для этого, было бы полезно немного больше информации - в частности, используете ли вы разные комбинации идентификаторов GUID, которые есть в памяти (чтобы их можно было хэшировать только один раз, поскольку они создано), или вы загружаете их и обрабатываете их, и повторные идентификаторы GUID маловероятны?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top