【发布时间】: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