【问题标题】:Will this addition always produce a unique number?这个加法总是会产生一个唯一的数字吗?
【发布时间】:2018-12-14 14:43:01
【问题描述】:

我不知道如何详尽地测试以下内容,而不是强制它,所以我只是问这个概念是否合理。

我有两个 64 位 unsigned int 变量,它们都用作位域。这两个变量最多可以设置 60 位,从 1 到 60。可以设置任意数量的 60 位,并且可以按任意顺序设置它们。位 61、62 和 63 不会在任一变量中设置。此外,只有一个变量总是设置第 64 位。

鉴于上述描述,我认为 hash 对于 field1 和 field2 的所有可能组合都是唯一的是否正确?:

uint64_t field1 = ...;
uint64_t field2 = ...;
uint64_t hash   = field1 + field2;

【问题讨论】:

    标签: math


    【解决方案1】:

    没有。简单例子:

    0b0011 + 0b0100 = 0b0111
    0b0010 + 0b0101 = 0b0111
    

    不可能为所有长度为 n 的值对提供长度为 n 的唯一哈希。请注意,大约有 2^60 * 2^60 = 2^120 组合,因此 2^60 哈希不能适合所有组合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多