【问题标题】:Hash string to a number % 16哈希字符串到一个数字 % 16
【发布时间】:2021-11-22 17:07:48
【问题描述】:

我想重用或编写一个哈希算法,它将一个相对较短的字符串哈希为一个数字 0 - 15。我想用它来将一个测试映射到一个特定的 Redis 数据库(默认限制为 16 个数据库)。

我将如何设计这样的哈希算法或寻找合适的算法以优化低碰撞风险(因为目标空间非常小)?

【问题讨论】:

  • 有很多很好的字符串哈希函数,比如djb2。正如您所建议的,您可以对结果进行模数 16。如果你有超过 16 个字符串,显然肯定会发生很多冲突 - 没有办法解决这个问题。
  • 假设您有一个相对较短的 10 个字符的字符串,仅限于 26 个英文字母小写字母...您有 1.41E+14 种可能性,或大约 2^47。在 2^4 目标空间中散列它,使用最佳算法将导致每个值发生 2^43 或大约 8 万亿次碰撞

标签: algorithm hash redis hex modulo


【解决方案1】:

使用具有高uniformity 的哈希函数并将结果取模16。

这应该使您的碰撞风险尽可能低(由于目标空间很小,碰撞风险仍然很高)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2018-04-24
    • 2013-12-19
    • 2022-06-15
    • 2017-04-04
    • 2019-10-28
    相关资源
    最近更新 更多