【问题标题】:How to hash lists?如何散列列表?
【发布时间】:2016-09-04 15:57:37
【问题描述】:

列表不可散列。然而,我是implementing LSH,我正在寻找一个哈希函数,它将一个正整数列表(在 [1, 29.000] 中)对应到 k 个存储桶。列表的数量是 D,其中 D > k(我认为)和 D = 40.000,其中 k 尚不清楚(欢迎提出建议)。


示例(D = 4,k = 2):

118 | 27 | 1002 | 225
128 | 85 | 2000 | 8700
512 | 88 | 2500 | 10000
600 | 97 | 6500 | 24000
800 | 99 | 7024 | 25874

第一列应该作为哈希函数的输入并返回一个桶的编号。


让我困惑的是,我们不是在寻找一个函数来散列一个数字,而是一个列,即一个正整数列表。

有什么想法吗?

如果这很重要,我正在使用

【问题讨论】:

  • 将其转换为可散列类型,例如元组怎么样? (例如哈希(元组([1,2,3])))
  • @hunminpark 你的意思是print hash(tuple([1,2,3,4,5]))?这就是@lejlot 的建议,但他删除了他的答案..
  • 澄清一下,您的意思是要获取列表并生成单个存储桶索引,还是要获取长度为n 的列表并生成n 存储桶索引?
  • @mobiuskle 在第一。输入是一个正整数列表 -> h -> 桶的索引。

标签: python python list hash nearest-neighbor locality-sensitive-hash


【解决方案1】:

您可以在之前将其转换为可散列类型:

In [4]: hash(l)
TypeError: unhashable type: 'list'

hash(tuple(l)) % k  # 29000
Out[5]: 70846

【讨论】:

  • 有一个已删除的答案建议使用tuple 而不是str。对此有什么想法吗?
猜你喜欢
  • 2014-08-05
  • 2017-10-13
  • 2011-10-06
  • 1970-01-01
  • 2010-09-26
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
相关资源
最近更新 更多