如果我的意图是只有一个好的哈希函数,将数据均匀地传播到所有的桶中,那么我不需要想出一个哈希函数家族,我只需要一个好的哈希函数,对吗?
拥有一个散列函数族的目的只是为了使敌人更难建立一个病理数据集,因为当我们随机选择一个散列函数时,他/她没有使用哪个哈希函数的信息。我的理解对吗?
编辑:因为有人试图关闭,因为不清楚;这个问题是知道使用一个通用的散列函数家族的真正目的。
发布于 2016-02-08 02:17:32
我只需要一个好的哈希函数,对吗?
正如您在后面的问题中所指出的,一个知道您正在使用的哈希函数的“敌人”可能会准备一个病理数据集。
此外,哈希只是将数据存储到表的存储桶中的第一个阶段--如果您正在实现开放寻址/闭包散列,您还需要在碰撞后选择替代的桶来探测:线性和二次探测之类的简单方法通常提供足够的冲突避免,而且在数学上可能比重散列更简单,因此比重散列更快,但它们不保持下一个探测在负载因子下找到未使用桶的可能性。使用另一个好的哈希函数(包括来自此类函数家族的另一个哈希函数)进行重新散列,所以如果这对您来说很重要,您可能更喜欢使用一个散列函数系列。
还请注意,有时内存中的哈希表用于表示磁盘数据上的偏移量/扇区存储在哪里,因此,使用内存中已经存在的数据进行额外的重散列计算可能比等待磁盘I/O以找到另一个冲突的更高概率(使用线性/二次探测)更有吸引力。
https://stackoverflow.com/questions/35237721
复制相似问题