我想根据指定的地理半径(10米)对推文进行聚类。例如,如果我指定10米半径,那么我希望10米范围内的所有推文都在一个群集中。
一个简单的算法可能是计算每个推文和每个推文之间的距离,但这在计算上非常昂贵。有没有更好的算法来做到这一点?
答案 0 :(得分:1)
您可以在quadtree中整理推文。这使得在不查看所有花呢及其位置的情况下很容易找到附近的推文。 四叉树不直接传递距离(因为它基于Manhatten-distance,但它会通过推文提供近距离,之后您可以计算之后的精确距离。
答案 1 :(得分:0)
如果你的问题只是计算距离:
请记住:如果您只需要比较,则不应计算距离。改用他们的方块。
不要比较:
sqrt((x1-x2)^ 2 +(y1-y2)^ 2)对10
比较
(x1-x2)^ 2 +(y1-y2)^ 2对100
时间大大减少。
如果您只是在比较距离的平方之前比较坐标,则可以达到其他改进。如果abs(x1-x2)> 1,则不再需要该对。 (这是MrSmith所说的Manchattan距离)
我不知道你如何使用你的点,但是如果它们的设置是稳定的,你可以制作它们的两个数组,并且每个数组根据其中一个坐标对它们进行排序。之后,您只需要检查两个阵列中靠近源1的这些点。