2

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

这些 id 每个都为 64 位,是通过将创建时间、机器网络地址和随机数哈希在一起生成的。根据维基百科关于生日问题的文章,两亿条记录的哈希冲突概率为 0.1%。

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

否则,这种行为将是非常不受欢迎的,因为游戏世界中两个独立的事物会产生联系,从而共享它们的属性,如位置、运动、健康点等。

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

4

1 回答 1

2

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

  1. 使用更大的散列,这样几乎不可能发生冲突。

  2. 考虑哈希码是非唯一的,并对实际数据使用相等比较器来确定唯一性。

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

于 2013-08-29T00:33:36.083 回答