Hash 集的增量散列

Hash 集的增量散列,hash,set,Hash,Set,增量散列元素集的好方法是什么?必须这样做,才能按任意顺序添加和删除元素,并且相同的集合具有相同的哈希。其目的是能够从集合中快速找到集合或其细微修改 关于向量空间方法与组合运算符的比较 这里有些东西不起作用。b位整数可以被认为是GF(2)上的向量空间V,其中加法是异或运算符(例如10+11=01),与0或1的乘法是分量逻辑and(例如1*10=10,0*10=00)。可以将元素随机(但固定)映射到b位整数E={E_1,…,E_b},然后通过将元素的哈希相加来计算集合的哈希。在这样做时,必须确保E构

增量散列元素集的好方法是什么?必须这样做,才能按任意顺序添加和删除元素,并且相同的集合具有相同的哈希。其目的是能够从集合中快速找到集合或其细微修改

关于向量空间方法与组合运算符的比较

这里有些东西不起作用。b位整数可以被认为是GF(2)上的向量空间V,其中加法是异或运算符(例如10+11=01),与0或1的乘法是分量逻辑and(例如1*10=10,0*10=00)。可以将元素随机(但固定)映射到b位整数E={E_1,…,E_b},然后通过将元素的哈希相加来计算集合的哈希。在这样做时,必须确保E构成向量空间V的基础;否则,哈希不能使用b位整数的所有值


这种技术的问题是,如果E-基的use子集对于任何基向量E_i都没有(比如)非零的第一分量,则结果散列不能是奇数。根据使用的基向量子集的不同,也会出现类似的问题。总之,不应使用XOR查找集合的哈希。使用普通求和+可能不会更好。

一种解决方案是增加一棵红黑树,使每个节点包含在该节点上生根的子树的组合散列(总是将左子散列与当前节点散列与右子散列相结合)。这允许在固定时间内查找所有元素的散列(根节点的散列),而不会影响红黑树的属性。可以创建一个通用的红黑树实现,该实现允许自动更新节点中的层次信息,其中更新规则由数据结构的用户指定。由于红黑树在重新平衡时可能会旋转,这意味着哈希组合函数必须是关联的。在Tillich和Zémor的论文“使用SL2进行散列”中,可以找到一个具有关联散列组合函数(矩阵乘法)的散列函数。但我不确定这是否有一个可接受的性能