如何处理哈希冲突?

时间:2013-08-29 00:25:08

标签: hash guid identifier hash-collision robustness

我正在开发一款游戏,游戏世界中的每件事物都由全球唯一标识符代表。

这些ID每个都是64位,通过将创建时间,机器网络地址和随机数一起散列来生成。根据维基百科关于Birthday problem的文章,对于2亿条记录,哈希冲突的概率为0.1%。

由于我不太可能获得那么多记录,因此可以认为没有哈希会碰撞。但我不希望这样,但让我的应用程序处理一个罕见的id碰撞情况,因此哈希冲突。

否则,行为将是非常不受欢迎的,因为游戏世界中的两个独立事物将具有连接,因此共享它们的属性,如位置,移动,健康点等。

如何处理哈希冲突?它们通常如何处理?

1 个答案:

答案 0 :(得分:2)

通常,哈希冲突以两种方式处理:

  1. 使用更大的哈希,以便几乎不可能发生冲突。

  2. 将哈希码视为非唯一,并使用相等比较器来确定实际数据的唯一性。

  3. 128位GUID使用第一种方法。 .NET中的HashSet<T>类是第二种方法的一个例子。