hash - 如何处理哈希冲突?

标签 hash guid identifier hash-collision robustness

我正在开发一款游戏,游戏世界中的所有事物都由全局唯一标识符表示。

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

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

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

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

最佳答案

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

  1. 使用更大的哈希值,这样冲突几乎就不可能发生。

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

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

关于hash - 如何处理哈希冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500437/

相关文章:

c - C 中的字符串/整数关联

java - 使用 MD5 哈希作为索引

C#/Java/Ruby - 密码哈希算法 - 跨语言/平台

guid - 在分布式并发环境中生成唯一序列号时有哪些权衡?

c# - SQL Server 中的 GUID

node.js - 将 md5 哈希值添加到 mongo 集合

url - GUID 与 int : Does it makes any difference for SEO?

c - 易于维护的标识符与文本表

variables - 为什么用变量名替换其值导致 “' xxx'应该被声明为“错误”?

c - C 中的预期标识符错误