在插入后,随机生成整数的通用散列函数如何执行查找?

时间:2016-02-13 01:22:40

标签: algorithm hash hashtable hashcode

以下演示取自Tim Roughgarden提供的关于Coursera的算法:设计和分析视频讲座(非凡的解释顺便说一句)。据我所知,这个哈希函数有效地返回哈希表中0到n之间的现有索引位置。然而,当a(下面)是随机整数时,我对这种独特的计算如何被反向设计用于恒定时间查找感到困惑。

Let U = IP addresses (of the form (x1, x2, x3, x4)
                       with each subscript of x in  {0,1,2,...255})
Let n = a prime number
Define one hash function per 4-tuple a = (a1, a2, a3, a4)
                         with each subscript of a in {0, 1, 2,...n-1}
Define: h<sub>a : IP addresses ---> buckets        *n^4 such functions*
by h<sub>a(x1,x2,x3,x4) = (a1x1 + a2x2 + a3x3 + a4x4)

<sub> = subscript notation

然后使用modulo n计算上述等式,以返回哈希表中对于U内的任何不同输入具有1 / n概率重现概率的位置。如何使用原始IP地址检索该IP地址?

1 个答案:

答案 0 :(得分:1)

哈希失去了信息。因此,您无法从哈希向后工作。您将原始文件存储在其哈希值给出的索引处;您可以通过查看H(x)处的项是否为x来验证表中的某个值x。

当然,如果表中的两个对象具有相同的哈希值(&#34; collision&#34;),那将无法工作。不同的哈希表算法有不同的策略来处理冲突,对于你的讲师可能解释的策略,拥有另一个独立的哈希函数会很有用。