【发布时间】:2021-06-17 12:38:31
【问题描述】:
什么是车辆识别号的良好哈希码,即字符串 由“9X9XX99X9XX999999”形式的数字和字母组成,其中“9”代表 一个数字和一个“X”代表一个字母?
【问题讨论】:
-
...一切顺利... /AgainstMethod
-
您能详细说明一下您的用例吗? “好的”散列函数在这里有什么属性?
标签: hash hash-function
什么是车辆识别号的良好哈希码,即字符串 由“9X9XX99X9XX999999”形式的数字和字母组成,其中“9”代表 一个数字和一个“X”代表一个字母?
【问题讨论】:
标签: hash hash-function
一种合理的方法是使用适合字符串的哈希函数对整个事物进行哈希处理,例如GCC 的 C++ 标准库使用 MURMUR32。
如果您想多动手,可以将所有数字组合成一个 11 位数字,并且知道 6 个字母可以有 26 个不同的值,小于 2^5=32 - 您可以廉价地创建通过评估这些字母中的数字(我们称它们为 ABCDEF):A + B * 2^5 + C * 2^10 + D * 2^15 + E * 2^20 + F * 2^25
然后,将 11 位数字和由字母创建的数字分别用适当的散列函数进行散列,并对结果进行异或或相加;你的 VIN 会有一个很好的哈希值。我没有亲自评估它,但 Thomas Mueller 推荐并解释了一些表面上合适的here:
uint64_t hash(uint64_t x) {
x = (x ^ (x >> 30)) * UINT64_C(0xbf58476d1ce4e5b9);
x = (x ^ (x >> 27)) * UINT64_C(0x94d049bb133111eb);
x = x ^ (x >> 31);
return x;
}
【讨论】: