如何解决哈希表压缩函数
朋友们,我有一个问题,因为我找不到太多关于它的信息,我如何实现一个压缩哈希函数来订购10个车牌?车牌由3个数字和3个字母组成,有人可以举个例子来支持我。
解决方法
一种简单的方法是在内存中并排排列值,然后在该内存块上运行现有的哈希函数。对于大多数用途,即使是 CRC 函数也会产生足够好的结果。
另一种方法是选择任何能从数字中产生良好散列的函数,然后依次散列每个部分(或者在紧要关头只使用数字 - 身份散列 - 这将是字母的 ASCII/Unicode/etc 值):3 位数字,然后是 3 个字母,为您提供六个哈希值 - 假设您已将数组元素 h[0]
到 h[5]
放入,然后您可以将它们组合起来如下:
size_t x = 0;
for (int i = 0; i < 5; ++i)
x ^= h[i] + 0x9e3779b9 + (x<<6) + (x>>2);
如果您想知道为什么这通常是合理的,请查看 this question。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。