我很好奇是否有一种方法可以存储具有以下属性的多组整数的哈希,理想情况下:
- 它使用O(1)空间
- 可以对其进行更新以反映O(1)时间的插入或删除
- 两个相同的集合(即具有相同元素且具有相同多重性的集合)应始终散列为相同的值,而两个不同的集合应以较高的概率散列为不同的值(即,函数是独立的或成对独立的)
对此的一种初步尝试是将乘积以各个元素的哈希的随机素数模存储。满足1和2,但尚不清楚它是否满足3。
我最初将此内容发布在StackOverflow上。
*属性1和2可以放宽到O(log n)或小的次线性多项式。关键是要看我们是否可以识别多集合并可靠地测试相等性而无需存储元素本身。
您对多集的表示是什么?即,如何将多集编码为位字符串?如果您真的想获得操作(与多集大小无关),我认为您应该使编码明确。
—
Jukka Suomela
集的编码并不重要。散列函数应独立于集合的表示。如果我使用的是哈希集的规范表示形式,则该集的位表示形式上的任何标准哈希都将满足3,可能满足1,但不满足2。我应该补充一点,两个相等的集合应始终将hash哈希化为相同的值。
—
jonderry
2到底是什么意思?您是否获得了旧集,旧哈希码和新元素,并且想要计算新哈希码?还是只得到旧的哈希码和新的元素?
—
Mihai 2010年
理想情况下,您不需要旧的设置。您甚至不需要执行成员查询(重要的是,给定空间限制),只需进行相等性测试,就可能通过比较具有低误报率的哈希值来进行。
—
jonderry