【问题标题】:Comparing numbers using a modular hash function?使用模块化哈希函数比较数字?
【发布时间】:2018-03-20 03:03:25
【问题描述】:

我想使用哈希表比较 b 位的 b 基数,以确定哪些是相同的。如果我使用模块化哈希函数,我应该使用 h(a) = a mod (b) 还是 h(a) = a mod (b-1)?我不确定如何确定这些是否合适。

【问题讨论】:

  • mod b。假设 b = 5,如果你有 5 个数字,如果你的 mod 是 b-1,0 将等于 4,在基数 5 中是不正确的

标签: algorithm sorting hash hashmap


【解决方案1】:

所以你在0 ... b^b - 1 范围内有b 数字(例如100 ... 9999999999 范围内的数字)。

如果你想保证哈希函数是无冲突的,你不能使用mod。如果你使用例如a mod 10,然后3156465421 都得到哈希值 1 并发生碰撞,10000000000 以下的每个 mod 都会发生这种情况。

所以只能降低哈希冲突的概率。有机会避免碰撞的最小 mod 值是b(但很可能你会遇到碰撞)。如果不进行适当的概率计算,我会选择 mod b*b 之类的东西,有效地取两个尾随数字。

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 2013-10-21
    • 2015-03-07
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2015-01-25
    • 2013-12-21
    相关资源
    最近更新 更多