散列以获取唯一ID

问题描述 投票:0回答:1

在数据集中,对观察的两个属性的唯一ID(一行)进行散列是否是为观察创建唯一ID的正确方法,因为该观察的唯一性来自于所述属性的同现?

数据示例如下:

   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

但是,ID不是连续的,即不存在5,100,306个方案。

而且我正在Python中处理数据集的是:

hex(hash((scenario_id,procedure_spvid)))
python hash unique-id
1个回答
1
投票
散列的目的不是保证唯一性,而是当您原本需要的“证明”大于您必须存储的空间时,提供唯一性[[合理概率。

唯一的[[truly唯一存储唯一(sid, pid)对的唯一方法是通过字符串,元组等将它们彼此嫁接在一起。但是如果sidpid分别存在,则说,即4个字节,则至少需要8个字节。如果只想使用4个字节,则可以使用4个字节的(sid, pid)哈希值-但由于仅将4个字节以上的可能选项放入4个字节中,因此存在重复的可能性。从数学上讲,这就是pigeonhole principle

如果您使用的是数据库,则可能有一种方法可以指定同时包含两列的compound key,以便

together

它们为行的其余部分提供主键。如果您使用的是正确语言的哈希表(例如python dict),则该数据结构将跟踪重复的哈希并容纳它们,以使它们不会返回相同的值。 如果您使用的是散列并自己进行管理,则必须接受冲突的可能性。

没有特别看到您的数据集,我们无法真正解决问题[[为什么

,但是您可能会看到重复的哈希。
© www.soinside.com 2019 - 2024. All rights reserved.