Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最大最小距离意义下的最佳子样本_Algorithm_Distance_Mathematical Optimization - Fatal编程技术网

Algorithm 最大最小距离意义下的最佳子样本

Algorithm 最大最小距离意义下的最佳子样本,algorithm,distance,mathematical-optimization,Algorithm,Distance,Mathematical Optimization,在D维度量空间中有一组N个点。我想用这样一种方式来选择K个点,即子集中任意两点之间的最小距离是最大的 例如,在三维欧几里德空间中,当N=4和K=3时,解是具有最长短边的四面体的面 有没有一个经典的方法来实现这一点?它能在多项式时间内精确求解吗 我已经尽可能多地在谷歌上搜索,但我还没有弄清楚如何称呼这个问题 在我的例子中,N=50,K=10,D=300 澄清: 蛮力方法是尝试N个点中K个点的每个组合,并确定每个子集中最近的一对。解由产生最长对的子集给出 以平凡的方式完成,一个O(K^2)过程,重复

在D维度量空间中有一组N个点。我想用这样一种方式来选择K个点,即子集中任意两点之间的最小距离是最大的

例如,在三维欧几里德空间中,当N=4和K=3时,解是具有最长短边的四面体的面

有没有一个经典的方法来实现这一点?它能在多项式时间内精确求解吗

我已经尽可能多地在谷歌上搜索,但我还没有弄清楚如何称呼这个问题

在我的例子中,N=50,K=10,D=300

澄清:

蛮力方法是尝试N个点中K个点的每个组合,并确定每个子集中最近的一对。解由产生最长对的子集给出

以平凡的方式完成,一个O(K^2)过程,重复N!/K(N-K)!时代


哼,10^250!/10! 40! = 1027227817000

我想你可能会发现单位圆盘图上的文章信息丰富,但令人沮丧。例如,指出单位圆图上的最大独立集问题是NP完全的,即使已知圆的表示形式。单位圆盘图是通过在平面中放置点并在每对点之间形成链接(最多相距单位距离)而获得的图形

所以我认为如果你能在多项式时间内解决你的问题,你可以在单位圆盘图上运行它,计算不同的K值,直到你找到一个值,在这个值上,两个选择点之间的最小距离刚好超过1,我认为这是单位圆盘图上的最大独立集,这将在多项式时间内解决一个NP完全问题

(正准备跳上自行车,所以这有点匆忙,但在单位磁盘图上搜索论文可能至少会找到一些有用的搜索词)

下面是一个逐条解释的尝试:

下面是将这两个问题联系起来的另一个尝试

有关最大独立集,请参见。这个问题的一个决策问题版本是“这个图中有K个顶点,没有两个被一条边连接吗?”如果你能解决这个问题,你当然可以找到一个最大的独立集,通过对不同的K问这个问题来找到最大的K,然后通过对删除了一个或多个节点的图的版本问这个问题来找到K个节点

在没有证据的情况下,我声明在单位圆图中寻找最大独立集是NP完全的。这方面的另一个参考是

你的问题的一个决策版本是“任意两点之间是否存在距离至少为D的K点?”同样,你可以在多项式时间内解决这个问题,如果你可以在多项式时间内解决你的原始问题-反复玩,直到找到答案为“是”的最大D,然后删除点,看看会发生什么

当两点之间的距离等于或小于1时,单位圆盘图正好有一条边。因此,如果您可以解决原始问题的决策版本,您可以通过设置D=1并解决您的问题来解决单位磁盘图问题的决策版本


所以我想我已经建立了一系列的链接,表明如果你能解决你的问题,你可以通过把它转化为你的问题来解决NP完全问题,这让我觉得你的问题很难解决。

听起来你可以用点之间的距离构建一个图,然后运行Kruskal算法的修改版本来构建最大生成树。最大生成树可以是V形的,节点之间有很长的链接,但两个节点之间没有非常紧密的链接。我可以想到一些明显的爬山和贪婪算法(扫描数据,反复查看是否将新点与目前为止保留的一个点交换会改善情况),但它们不会给出某些优化结果。我已经在N个点上建立了最大生成树。如何修剪树以获得我的K子样本?生成树以什么方式让我更接近解决方案?这是一个非常有趣的方法,确实有点令人沮丧。如果你发现在精神上很难检查你的论点是否正确,那么:(我已经试着添加了一个章节,一步一步地回顾我的论点