如果我有一组n维的k向量,我怎样才能对它们进行排序,使每个连续的向量对之间的距离尽可能小?可以使用欧几里德距离计算距离,但是如何以有效的方式实施“排序”?
我认为一种方法是随机选择一个矢量,计算到所有其他矢量的距离,选择最小化距离的矢量作为下一个矢量并重复直到所有矢量都已“排序”。但是,这种贪婪的搜索可能会产生不同的结果,具体取决于我从哪个向量开始。
关于如何做到这一点的任何想法?
答案 0 :(得分:0)
如果你真的只想要每个连续矢量对之间的距离是最小可能的'没有随机性,你可以首先找到2个最近的点(通过O(n log n)算法,如this) - 让我们说,p和q,然后搜索p的最近点(让'比方说,r)和q(让我们说,s),然后比较距离(p,r)和(q,s),如果第一个更小,则从q,p,r开始并使用你的贪婪algo(在其他情况下,很明显,从p,q,s开始)。
但是,如果您的目标实际上是安排点以使所有成对距离的总和最小,则应为Travelling salesman problem选择任何近似解。注意this trick以便将您的任务减少到TSP。