math - 这个加法总是会产生一个唯一的数字吗?
问题描述
我不知道如何详尽地测试以下内容,而不是强制它,所以我只想问这个概念是否合理。
我有两个 64 位 unsigned int 变量,它们都用作位字段。这两个变量最多可以设置 60 位,从 1 到 60。可以设置任意数量的 60 位,并且可以按任意顺序设置它们。位 61、62 和 63 不会在任一变量中设置。此外,只有一个变量总是设置第 64 位。
鉴于上述描述,我认为哈希对于 field1 和 field2 的所有可能组合都是唯一的是否正确?
uint64_t field1 = ...;
uint64_t field2 = ...;
uint64_t hash = field1 + field2;
解决方案
没有。简单的例子:
0b0011 + 0b0100 = 0b0111
0b0010 + 0b0101 = 0b0111
不可能为所有长度为 n 的值对提供长度为 n 的唯一散列。请注意,有一些2^60 * 2^60 = 2^120
组合,因此2^60
哈希不能适合所有组合。
推荐阅读
- sql - 每组记录只显示一次值
- git - 从现有的 Git 存储库中进行稀疏签出?
- jquery - 选择所有在 webgrid Jquery 和 ASP.net MVC 中不起作用的复选框
- jenkins - 无法启动 Windows 从代理 (Jenkins)
- python - aiohhttp 中的会话重用
- java - 使用杰克逊读取 yaml 到对象
- javascript - 使用 jquery ajax 调用 nodejs 获取 json 数据
- azure - 如何找到blob的路径?
- ios - 你能给我上传 iOS 应用程序错误 ITMS-90035 的解决方案吗?
- r - Tidyverse:过滤分组数据框中的 n 个最大组