擅长:python、mysql、java
<p>你的方法有一个普遍的问题</p>
<p>大多数人都会以相同的方式期待及物性。这意味着当两个点<code>a</code>和<code>b</code>相等并且<code>a</code>也等于另一个点<code>c</code>时,那么<code>a</code>和<code>c</code>也应该相等。在您的实现中不一定是这样</p>
<p>想象一下,每个点周围都有一个球体,每个点被认为是相等的。下图显示了该球体(或球体半径的一半以上),因此重叠意味着点相等:</p>
<p><a href="https://i.stack.imgur.com/pz6Qr.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/pz6Qr.jpg" alt="point visualization"/></a></p>
<p>所以<code>a</code>和<code>b</code>应该有相同的散列码<code>b</code>和<code>c</code>应该有相同的散列码,但不是<code>a</code>和<code>c</code>?这怎么可能呢</p>
<p>我建议添加一个额外的方法<code>is_close_to</code>,并在那里实现逻辑</p>
<p><strong>编辑:</strong>
@JLPeyret指出,您可以使用网格并计算与包含该点的网格象限对应的点的哈希值。在这种情况下,两个邻近点可能接近网格象限的划分,因此分配了不同的散列值。如果这种概率方法对您有效,请查看<a href="https://en.wikipedia.org/wiki/Locality-sensitive_hashing" rel="nofollow noreferrer">locality-sensitive hashing</a></p>