首页 > 解决方案 > 哈希表压缩函数

问题描述

朋友们怎么样,我有一个查询,因为我找不到太多关于它的信息,我如何实现一个压缩哈希函数来订购 10 个车牌?车牌由 3 个数字和 3 个字母组成,有人可以举个例子来支持我。

标签: hashcompressionhashtable

解决方案


一种简单的方法是将值并排排列在内存中,然后在该内存块上运行现有的哈希函数。对于大多数用途,即使是 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);

如果您想知道为什么这通常是合理的,请查看此问题


推荐阅读