我在使用相当小的数据集(~100k 行)构建哈希表时遇到了冲突。我在这里做错了吗?
这是一个通常会生成相同哈希值的 2 位数据示例。(偶尔运行会产生不同的哈希值):
long long1 = 330765;
long long2 = 227691;
DateTime date1= new DateTime(2016, 5, 24);
DateTime date2= new DateTime(2016, 1, 25);
var c1 = HashCode.Combine(long1, date1);
var c2 = HashCode.Combine(long2, date2);
Console.WriteLine(c1);
Console.WriteLine(c2);
Run Code Online (Sandbox Code Playgroud)
可使用 dotnetcore 2.1 重现
您永远无法完全避免与哈希码发生冲突(除了具有少于 2^32 个可能的不同值的类型,如 shorts 或 bytes 或类似的东西)。编写一个好的散列只是意味着尽可能地减少冲突。您可以通过尽最大努力确保您的哈希码(大约)均匀分布在int.
您还可以尝试避免通常一起使用的某些值发生冲突(例如,您可以为日期提出一种生成算法,使同一周的日期不会发生冲突,并确保所有冲突的日期相距更远) .
但是任何时候您使用生成的哈希码时,您都需要有一些处理冲突的机制。
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |