高效的重复排序

时间:2012-12-12 14:44:49

标签: algorithm sorting

我在由(x,y)坐标定义的图形上有一组N个点,以及一个具有成对距离的表格。我希望生成一个表格,其中包含相对“亲密度排名”,例如如果closeness [5] [9] == 4,则节点9是相对于节点5的第四个最接近的项目。

这样做的显而易见的方法是生成一个indeces列表并根据d [i] [j]<对于每个i(1> n),d [i] [k],然后通过排序[5] [4] == 9的知识来转换表意味着亲近[5] [9] == 4。

这将需要O(n²logn)时间。我觉得可以有一种更有效的方式。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,我打算尝试一下这个。

背景知识:这个问题与k最近邻有关。我不确定你是如何产生成对距离的,但k-d树非常适合解决这类问题。

现在,即使您使用kd树,它也会有所帮助(您只需查询所需内容,而不是对所有点进行排序):在O(N log N)时间内构建树,然后为最近的K要查询的点数,每个点都需要O(log N)时间。最后,您正在查看O(N log N)+ O(NK log N)。

好的,现在,实际的启发式部分。这取决于您的数据,您可能希望看到它们是相距还是相距很远。但是,您可以尝试分而治之的方法,将平面划分为分档。当您需要找到最近的点时,找出您正在使用的点属于哪个bin,然后您只使用相邻的bin,并在需要更多点时探索更多相邻的bin。

希望这有帮助,祝你好运。