![]() |
1
4
假设的 :假设您的容差目前为1。这意味着0等于0.8,因为它们的差值小于公差。然后比较0.8和1.5,它们相等,因为它们的差值为0.7<1、这意味着它们将获得相同的哈希值,这意味着0和1.5具有相同的哈希值,重复该过程 每件事 将获得相同的哈希值/相等。
这没有道理,是吗?你不能这样做
|
![]() |
3
1
|
![]() |
4
0
你可以
将数据拆分为多个范围
并且说在某个范围内的一切都是平等的。
因此,如果我们分裂成1的范围,我们可以说0和1之间的一切(不包括1,即在范围[0,1]内)都是相等的,1和2之间的一切都是相等的,依此类推。 然而,这确实会产生一个问题 彼此非常接近的元素可能不相等 如果它们在不同的范围内,例如,对于上述情况,0.9999将不被视为等于1.0001。 如果您试图对此仅使用相等(和哈希),那么这个问题是无法完全避免的,因为扩展这些范围并不能解决这个问题,而试图使它们重叠会产生新的问题。 根据您尝试如何使用它,可能通过多次查找来解决上述问题,因此您可以在[0,1]范围和[1,2]范围内都考虑0.9999。如果您尝试进行查找,以找到与其他元素在一定公差范围内的所有元素(这与将元素视为相等并不完全相同),那么这将起作用。
如果这对您不起作用,那么哈希可能不是您正在寻找的解决方案,您可能希望
考虑一个有序的数据集
,例如
这主要基于1D数据(即双倍数据),但通过对每个维度进行舍入,可以很容易地将其扩展到2D(正方形范围)或3D(立方体范围)。如果如上所述进行多个查找,则可能不需要进行1次查找(最接近的范围),而需要在2D中进行最多3次查找(水平和垂直方向上最接近的正方形范围,以及与这两者相邻的正方形),对于3D也是如此。 |
|
synthax · 具有容差级别的双精度哈希方法 7 年前 |
![]() |
Relaxsingh · 附加导师程序无法正常工作***阅读说明*** 7 年前 |
|
user8589267 · 我的equals方法有什么问题? 7 年前 |
![]() |
James W. · 带有通配符的java黑名单 7 年前 |