对多维向量进行排序

Posted

技术标签:

【中文标题】对多维向量进行排序【英文标题】:Sorting multidimensional vectors 【发布时间】:2015-05-14 06:22:45 【问题描述】:

如果我有一组 n 维的 k 个向量,我如何对它们进行排序,以使每对连续向量之间的距离尽可能小?距离可以用欧几里得距离计算,但是“排序”又是如何有效实现的呢?

我在想一种方法是随机选择一个向量,计算到所有其他向量的距离,选择最小化距离的向量作为下一个向量,然后重复直到所有向量都被“排序”。但是,这种贪婪的搜索可能会根据我从哪个向量开始呈现不同的结果。

关于如何做到这一点的任何想法?

【问题讨论】:

【参考方案1】:

如果你真的想要'每对连续向量之间的距离是最小的可能'而没有随机性,你可以首先找到 2 个最近点(通过 O(n log n) 算法,如 this) - 比方说, p 和 q,然后搜索 p(假设为 r)和 q(假设为 s)的最近点,然后比较距离 (p,r) 和 (q,s),如果第一个较小,则从q,p,r 并使用你的贪心算法(在其他情况下,显然是从 p,q,s 开始)。

但是,如果您的目标实际上是排列点以使所有配对距离之和最小,您应该为Travelling salesman problem 选择任何近似解。请注意this trick,以便将您的任务减少到 TSP。

【讨论】:

以上是关于对多维向量进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何进行快速的多维矩阵向量乘法?

使用整数向量的向量对整数向量进行基数排序

Armadillo C++:根据其他两个向量对向量进行排序

多维向量分类opencv

C++ 按列对二维向量进行排序

根据额外参数对向量进行排序