我需要为封装此数据的对象构建一个哈希(作为无符号32位整数)。
Entry {
uint8 r;
uint8 g;
uint8 b;
bool empty;
uint8 count;
}
对于每个实例,散列必须是唯一的,除非实例相等。当且仅当:
时,两个实例相等和
散列将用于散列图和其他容器中,因此可能经常调用它。哈希生成需要很快。
我想到了CCCERRRGGGBBB,其中:
但这个数字超出了范围。
有什么想法吗?
答案 0 :(得分:2)
您将很难将33位信息编码为32位
if (empty == false)
return count ~ r ~ g ~ b
else
return count ~ 0
你得到一个重叠,当空为假而r,g,b都为0时 - 这将是与空为真且r,g,b为0时相同的散列
没有进一步的假设,这是可以做到的最好的。