【发布时间】:2015-11-15 07:11:04
【问题描述】:
考虑以下代码:
def xorHash(n):
mask = random.getrandbits(32)
def xorIt(x):
return (hash(x) ^ mask) % n
return xorIt
这会返回一个随机散列函数,它将元素映射到 {0,1,...,rng-1} 中的一个数字。
我想创建一个随机散列函数,将每个元素精确映射到 {0,1,...,rng-1} 中的 k 元素(不重复)。上面的例子完成了 k=1 的工作。
创建返回 {0,1,...,rng-1} 的 k 大小随机子集的随机哈希函数的最有效方法是什么?
【问题讨论】:
-
不要使用
range作为参数名称。这是一个非常重要的内置程序,您可以使用它。 -
@MikeMüller - 更改,谢谢。
-
“没有重复”是否意味着您想要一个完美的哈希函数,或者 [0, rng) 中的
k元素是不同的?您是否考虑过使用k哈希函数(或者是关于如何创建这些函数的问题)? -
@MichaelFoukarakis - 是的,我需要
k不同的值。拥有k哈希函数可能会返回重复项。我可以保留多个k,然后将结果唯一化,希望我有k不同的值,但这似乎效率低下并且可能会失败。 -
如果您将散列函数的结果视为位串,则将其中的
k连接起来生成最终散列不会产生重复。不过,对于大型k,它可能效率不高。
标签: python random set sampling