我正在开发一款游戏,游戏世界中的所有事物都由全局唯一标识符表示。
这些 id 每个都是 64 位,是通过将创建时间、机器网络地址和随机数哈希在一起生成的。根据维基百科的文章Birthday problem ,对于两亿条记录,哈希冲突的概率为 0.1%。
由于我不太可能获得那么多记录,因此可以认为没有哈希会发生冲突。但我不想希望如此,而是让我的应用程序处理 id 冲突的罕见情况,从而处理哈希冲突。
否则,这种行为将是非常不受欢迎的,因为游戏世界中两个独立的事物会存在联系,从而共享它们的属性,例如位置、移动、生命值等。
如何处理哈希冲突?通常如何处理它们?
最佳答案
通常哈希冲突有两种处理方式:
使用更大的哈希值,这样冲突几乎就不可能发生。
将哈希码视为非唯一性,并对实际数据使用相等比较器来确定唯一性。
128 位 GUID 使用第一种方法。 HashSet<T>
.NET 中的 class 是第二种方法的示例。
关于hash - 如何处理哈希冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500437/