Universal系列哈希函数是否仅用于防止敌人攻击?

时间:2016-02-06 05:28:42

标签: data-structures hash hashtable universal-hashing

如果我的意图是只有一个好的哈希函数将数据均匀地分布到所有桶中,那么我不需要提出一系列哈希函数,我可以只使用一个好的哈希函数,这是正确的?

具有一系列散列函数的目的只是为了使敌人更难以构建病态数据集,因为当我们随机选择散列函数时,他/她没有关于使用哪个散列函数的信息。我的理解是对的吗?

编辑: 因为有人试图关闭,因为不清楚;这个问题是要了解使用Universal系列哈希函数的真正目的。

1 个答案:

答案 0 :(得分:0)

  

我可以使用一个好的哈希函数,这是正确的吗?

正如你在问题中稍后提到的那样,一个"敌人"谁知道你正在使用哪个哈希函数就可以准备一个病理数据集。

此外,散列只是将数据存储到表格桶中的第一个阶段 - 如果您正在实施开放寻址/封闭散列,您还需要选择备用存储桶以便在冲突后进行探测:简单的方法像线性和二次探测一般提供足够的碰撞避免,并且可能在数学上更简单,因此比重新划线更快,但它们不会保持下一次探测在负载因子处找到未使用的桶的概率。与另一个良好的哈希函数(包括来自一系列此类函数的另一个)进行重新组合确实如此,如果这对您很重要,您可能更喜欢使用一系列哈希函数。

另请注意,有时使用内存中的哈希表来表示存储磁盘数据的偏移/扇区,因此对内存数据进行额外的重新计算可能比更高的概率更具吸引力(使用线性/二次探测)等待磁盘I / O只发现另一次碰撞。