选择具有最小可能直径的k点

时间:2017-04-07 01:54:09

标签: algorithm optimization dynamic-programming computational-geometry

给定一组n点和n x n距离矩阵,如何准确选择这些点k,使得直径(任意两个选定点之间的最大距离)为最小化?距离度量服从三角不等式,但不一定是欧几里德或闵可夫斯基距离。我们可以假设所有距离都是成对不同的。

此外,我想为n - 1, n - 2, ... n - d范围内的所有k解决此问题。我知道这可以比检查每个n choose k的所有k组合快得多,但我提出的解决方案仍然不是很有效(我很确定多项式时间解决方案可以做到这一点)不存在,但我想知道是否有可能做得更好。)

我提出的唯一方法是递归方法。找到它们之间距离最大的两个点p1p2(按距离排序所有对)。然后k = n - 1情况是由所有点减去p1或p2组成的集合之一。一个可能比另一个好,或者它可能是平局。 k < n - 1的所有解决方案必须是其中一个集合的子集(不能包含p1和p2),但不一定是获胜的集合。继续检查这两组的子集。我认为这类似于O(n^2 log n + 2^d),但只要k足够小,就可以比检查每个n - d的所有组合更好d。我认为至少k / 2)。

相关问题 - 找到直径不大于t的最大子集 - 相当于independent set problem(带有距离大于t的边的图表)但是这个已知是NP难的。

这些解决方案都没有利用三角不等式,这让我有一种希望能够找到更有效的解决方案。

2 个答案:

答案 0 :(得分:0)

遵守三角不等式的指标应该能够支持https://en.wikipedia.org/wiki/Cover_tree。如果在实践中度量与低维空间大致相同,这将节省搜索关闭点的时间。

鉴于此,我将运行分支和边界搜索,递归搜索所有(n选择k)可能性,但通过从覆盖树中可逆地删除子树来尽快丢弃部分解决方案。在搜索的每个阶段,您都有一个与目前为止找到的最佳答案相对应的距离(在开始时这可能是无穷大或猜测)。向当前部分解决方案添加点时,可以从封面树中可逆地删除子树,这些子树仅包含距离刚刚添加的点的当前最佳距离大于或等于的点。使用覆盖树,您可以使用三角形不等式的推导来检查:d(a,b)+ d(b,c)&gt; = d(a,c)意味着d(a,b)&gt; = d(a,c) - d(b,c)。如果您发现剩余封面树中没有足够的点来完成当前的部分解决方案,则可以从递归的该部分返回。

答案 1 :(得分:0)

对于与所有距离相当的所有D:

考虑graph,其顶点集是您的点集和边缘
是{p,q}对,使得这些点之间的距离大于而不是D.
当且仅当其补码为vertex cover时,一组点的直径最多为D。


因此,你的问题是NP难,但变成了
当由n-k参数化时,fixed-parameter tractable:

使用this algorithm二进制搜索来确定最低值
D可以在的距离之间的间隙以及缺失点达到该差距。