为自定义结构生成唯一哈希?

时间:2013-05-31 17:25:10

标签: algorithm hash hashmap

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

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

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

时,两个实例相等
  • count在两个实例中都相同

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

散列将用于散列图和其他容器中,因此可能经常调用它。哈希生成需要很快。

我想到了CCCERRRGGGBBB,其中:

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

但这个数字超出了范围。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

你得到一个重叠,当空为假而r,g,b都为0时 - 这将是与空为真且r,g,b为0时相同的散列

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