Хеширование для получения уникальных идентификаторов - PullRequest
0 голосов
/ 08 октября 2019

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

Пример данных выглядит следующим образом:

   scenario_id  procedure_spvid
0         2986           114374
1         2986           114660
2         2986           128564
3         2986           125072

scenario_id:
  min, max: 25, 5100306
  count unique: 2629
procedure_spvid:
  min, max: 2, 9000057
  count unique: 1163

Однако идентификаторы не являются смежными, т. Е. Нет 5 100 306 сценариев.

И что я делаю в наборе данных в Python, это:

hex(hash((scenario_id,procedure_spvid)))

1 Ответ

1 голос
/ 09 октября 2019

Цель хэша не в том, чтобы гарантировать уникальность, а в том, чтобы обеспечить разумную вероятность уникальности, когда «доказательство», которое вам в противном случае понадобилось бы, больше, чем пространство, в котором вы его храните.

Единственный действительно уникальный способ сохранить уникальную пару (sid, pid) - это привить их друг к другу, через строку, кортеж и т. Д. Но если sid и pidесли бы каждый, скажем, 4 байта, вам понадобится минимум 8 байтов для этого. Если вы хотите использовать только 4 байта, вы можете использовать 4-байтовый хэш (sid, pid) - но поскольку вы встраиваете возможные варианты более чем в 4 байта только в 4 байта, существует определенная вероятность дублирования. Математически это называется принципом pigeonhole .

Если вы используете базу данных, возможно, существует способ обозначить составной ключ , который включает в себя оба столбца,так что вместе они обеспечивают первичный ключ для остальной части строки. Если вы используете хеш-таблицу на соответствующем языке (например, python dict), то эта структура данных будет отслеживать дубликаты хешей и учитывать их, чтобы они не возвращали одно и то же значение.

Если вы используете хеш и сами управляете им, то вы должны принять возможность конфликта.

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

...