【问题标题】:Hashing with two functions vs one [closed]使用两个函数与一个函数进行散列[关闭]
【发布时间】:2018-03-10 00:22:55
【问题描述】:

最好有两个哈希函数,每个结果为 n/2 位,或者有一个哈希函数,最终结果为 n 位。我们甚至可以做出一般性的陈述吗,或者性能完全取决于用例:我要散列的字符串类型。

示例:假设我正在散列可能很长 (10^5) 的普通字符串, 使用两种方法检查碰撞:

  1. 使用两个哈希函数 h1(x) 和 h2(x),结果是两个 int 类型,并分别比较它们以猜测相等性。
  2. 使用单个哈希函数,结果为 long int。

哪一种方法比另一种更好(碰撞概率低)?

【问题讨论】:

  • 如何定义“更好”?碰撞概率低?计算速度?或者对您来说重要的属性是什么?哈希函数有什么用?创建哈希表?检查文档是否相等?

标签: string algorithm data-structures hash


【解决方案1】:

没有“更好”

重要的是尽可能少地发生碰撞。如果您可以使用一个哈希函数来实现这一点,那么就好像您在使用多重哈希函数时获得类似的低碰撞次数一样好。

顺便说一下,组合多个哈希函数也是一个稍微复杂的哈希函数。

因此,如果您需要哈希函数,您可以考虑:

  • 我必须对哪些数据执行散列函数?我可以使用这些知识中的任何一个来创建最有可能导致视图冲突的哈希函数吗?
  • 我的哈希函数有多贵(内存、计算时间)。即使有更多的碰撞,也许更快的更合适。

我建议始终使用真实数据分析不同方法的性能,以确定哪种方法最适合这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2013-07-12
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多