我正在开发一款游戏,游戏世界中的每件事物都由全球唯一标识符代表。
这些ID每个都是64位,通过将创建时间,机器网络地址和随机数一起散列来生成。根据维基百科关于Birthday problem的文章,对于2亿条记录,哈希冲突的概率为0.1%。
由于我不太可能获得那么多记录,因此可以认为没有哈希会碰撞。但我不希望这样,但让我的应用程序处理一个罕见的id碰撞情况,因此哈希冲突。
否则,行为将是非常不受欢迎的,因为游戏世界中的两个独立事物将具有连接,因此共享它们的属性,如位置,移动,健康点等。
如何处理哈希冲突?它们通常如何处理?
答案 0 :(得分:2)
通常,哈希冲突以两种方式处理:
使用更大的哈希,以便几乎不可能发生冲突。
将哈希码视为非唯一,并使用相等比较器来确定实际数据的唯一性。
128位GUID使用第一种方法。 .NET中的HashSet<T>
类是第二种方法的一个例子。