重用5个独立的哈希函数进行线性探测


14

在通过线性探测解决冲突的哈希表中,为了确保期望的性能,哈希函数来自5个独立家族是必要且充分的。(充分性:“具有恒定独立性的线性探测”,Pagh等人,必要性:“关于线性探测和最小独立性要求的k独立性”,Pătraşcu和ThorupO(1)

据我了解,已知最快的5个独立家庭使用列表。从这样的家族中选择一个功能可能会很昂贵,因此我想尽量减少这样做的次数,同时仍要防止算法复杂性攻击,如Crosby和Wallach的“通过算法复杂性攻击拒绝服务”中所述。我不太担心计时攻击(即带有秒表的对手)。重用相同功能的后果是什么:

  1. 当散列表太满时?
  2. 缩小不够完整的哈希表时?
  3. 重建具有太多“已删除”位设置的哈希表时?
  4. 不同的哈希表中可能包含一些共同的键?ķ
  5. ķ

如果这是关于实践的问题,那么可行的方法是使用加密哈希函数(输入中包含随机秘密),而不是使用基于列表的方案。这样就减少了重用相同哈希函数的压力。您可以为每个哈希表使用不同的密码(并在缩小/增长/重建哈希表时更改密码并重新哈希所有内容)。
DW

我认为即使与使用多项式的独立于5的族相比,短输入(例如SipHash-2-4)上的快速密码哈希函数也相当慢。
jbapple

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.