algorithm - 如何向哈希码添加额外信息?
问题描述
给定一个字节数组,有几种众所周知的好算法可用于计算哈希码,例如 FNV 或 MD5。(这里不讨论密码学,只是通用哈希码。)
假设您拥有的是一个字节数组加上一个额外的信息,一个小整数(它不在内存中的数组旁边),并且您想要一个基于整个批次的哈希码。最好的方法是什么?例如,可以获取数组的哈希码并将其添加到小整数,或者异或。但是有更好的方法吗?
解决方案
我认为,更简单和有效的方法 - 只需用你的小值初始化“散列”累加器,然后通过普通方式计算散列。以下示例说明了我的方法,我们从 int 和 C 样式字符串计算哈希:
uint32_t hash(const char *str, uint32_t x) {
char c;
while((c = *str++) != 0)
x = ((x << 5) | (x >> (32 - 5))) + c;
return x ^ (x >> 16);
}
推荐阅读
- python - 当我使用 for 循环进行迭代时,有没有办法在嵌套列表中找到子列表的索引?
- python - 如何使用正则表达式将字符串中的数字放入python中的列表中
- websocket - 使用源源不断的实时数据流
- javascript - 如何重写 myFunction 使其工作
- pyarrow - 在 pyarrow 数据集中整合片段的最佳方法?
- python - Python中基于关键字参数名称的多方法/调度函数
- reactjs - React - 每隔几分钟创建仪表板并读取 API 调用(全部承诺) - 滞后
- kotlin - if/else 取决于输入是否为数字
- reactjs - ReactJS Material UI 在按钮单击时禁用其他选项卡
- java - 为什么不管是否抛出异常,这个测试都会成功?