Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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_Graph_Complexity Theory_Graph Algorithm - Fatal编程技术网

Algorithm 有没有一种算法可以在加权图中不重复地找到最佳的顶点对集?

Algorithm 有没有一种算法可以在加权图中不重复地找到最佳的顶点对集?,algorithm,graph,complexity-theory,graph-algorithm,Algorithm,Graph,Complexity Theory,Graph Algorithm,在具有偶数个顶点的完全加权图中,是否有任何有效的算法可以找到具有以下性质的边集 对于任何满足其他条件的集合,集合具有最小、最大的边权重 每个顶点仅连接到集合中的一条边 所有权重均为正值 我想不出比暴力更好的方法,但我不认为它是NP难的。试试这个(我只是想到了这个,所以我既没有证据证明它能给出最佳答案,也没有证据表明它是否能在所有情况下产生解决方案): 搜索最重的顶点V(A,B) 从图形中删除vertice V 如果A仅连接到单个其他垂直T(A,C),则移除连接到C的所有其他边,并对这些边重复

在具有偶数个顶点的完全加权图中,是否有任何有效的算法可以找到具有以下性质的边集

  • 对于任何满足其他条件的集合,集合具有最小、最大的边权重
  • 每个顶点仅连接到集合中的一条边
所有权重均为正值

我想不出比暴力更好的方法,但我不认为它是NP难的。

试试这个(我只是想到了这个,所以我既没有证据证明它能给出最佳答案,也没有证据表明它是否能在所有情况下产生解决方案):

  • 搜索最重的顶点V(A,B)
  • 从图形中删除vertice V
  • 如果A仅连接到单个其他垂直T(A,C),则移除连接到C的所有其他边,并对这些边重复步骤3
  • 如果B仅连接到单个其他垂直S(B,D),则移除连接到D的所有其他边,并对这些边重复步骤4
  • 重复步骤1

  • 在多项式时间内解决此问题的一种方法如下:

  • 按O(E log E)时间对边权重排序
  • 对于每条边,在~O(E)时间内为其指定一个伪权重E'=2^{position}
  • 在O(V^3)时间内找到伪权重之间的最小权重完美匹配(取决于您选择的算法,它可能会更慢或更快)
  • 这将最小化完美匹配包含的最大边,这正是您在O(V^3)时间内所寻找的

    下面给出了如何执行第3部分的来源
    [1]
    [2]
    [3]


    中,样本的C++源具有“最小最大可能权重”,你的意思是集合中的最大边权是所有的集合的最小值吗?如果是这样,那么为什么不选择空集,如果不允许,则选择具有单条边的集,即具有最小权重的边。编辑以进行更正。我确实需要这样做。啊,那么为什么不把最后两条语句组合成“每个顶点都连接到集合中的一条边”:-)我已经这样做了,因为这是个好主意。除非你进一步约束图(例如,它是二部的吗?),否则甚至不一定有解决方案:例如,4个顶点a、b、c、d和3条边ab、ac,这是我的贪婪算法。我认为它不会给出正确的答案,因为解决方案集可能不包含最重的边。例如ABCD、AB:100、BC:10、CD:10、DA:10、AC:10、BD:10。一个解集是AC,BD,它不包含最重的边AB。@ashaw:实际上,在这种情况下,算法将删除AB,并留下一个最优的20重解。我的算法不起作用的图形是:ABCD,AB:100,CD:10,AC:80,BD:80,AD:80,BC:80。最优解集是(AB,CD)=110,但该算法将产生次优160解,因为它很早就确定100不在解集中。啊,但这不是问题所在,因为我们正试图找到具有最小最大边的集。@ashaw:我想我误解了一些东西,你能给出几个示例图吗,以及他们各自的预期解决方案?你能更严格地定义“最小最大边”吗?这不是我所问问题的答案。我不是想找到边的最小和,而是具有最小最大边的集合,我编辑了这个问题以使其更清晰在排序中取2^位置的目的是确保它找到最小最大边,因为任何边的伪权重大于较小边的伪权重之和,不惜一切代价强制算法避免大边。