给出一个2d点和最大距离d的列表,比从O(n ^ 2)方法找到哪个点位于每个点的d内更好。我不需要解决方案只是一些启动想法。
答案 0 :(得分:2)
使用空间索引结构,例如kd树,你可以得到O(n log n)
啊我想我误解了你的评论。如果在查询中设置n个最近邻居,则在最坏的情况下,单个搜索会花费O(n log n),但您可以在每个找到的最近点上放置一个标记,以表示它们是否已属于特定群集。然后,您不必再为这些点执行最近邻居查询。所以最终的复杂性仍然是O(n log n)。以下是有关此类搜索http://www.cs.utah.edu/~lifeifei/cs6931/kdtree.pdf的详细信息。
我在这里假设,如果它已经属于一个集群,那么所需的行为是从一个点中删除一个点。也许你可以澄清一下问题规范?
答案 1 :(得分:0)
“找到”可能有n ^ 2个点对,所以你所追求的并不是很清楚。
执行此操作的“输出敏感”方式,其运行时间类似于O(n log(n)+ h),其中h是您“找到”的对数,如下所示:
在第三个项目符号中,如果你必须看k> = 6分,那么至少会有楼层((k / 6)^ 2)对“查找”(运动!),所以数量所考虑的对与“找到的”对的数量成正比。