0

我需要为封装此数据的对象构建散列(作为无符号 32 位整数)。

Entry {
    uint8 r;
    uint8 g;
    uint8 b;
    bool empty;
    uint8 count;
}

每个实例的散列必须是唯一的,除非实例相等。两个实例相等当且仅当:

  • count 在两种情况下都相等

  • r,g,b 相等在两个实例中都设置为空

哈希将在哈希映射和其他容器中使用,因此可能会被非常频繁地调用。哈希生成需要快速。

我想到了 CCCERRRGGGBBB,其中:

  • CCC/RRR/GGG/BBB:3 位计数/r/g/b
  • E:如果设置为空,则为 1,否则为 0

但这个数字超出了范围。

有什么想法吗?

4

1 回答 1

2

您将很难将 33 位信息编码为 32 位

if (empty == false)
  return count ~ r ~ g ~ b
else
  return count ~ 0

您会得到一个重叠,即当空为假且 r,g,b 均为 0 时 - 这将与空为真且 r,g,b 为 0 时的散列相同

没有进一步的假设,这是可以做到的最好的。

于 2013-05-31T17:34:46.023 回答