我有一个图,它强烈的连接(即有一个路径从i,j和j以我对每个节点(i,j)在图表G)。我希望找到一个强烈的连接线图出这个图,这样所有的边是最少的。

把不同的看法,我需要摆脱边缘,在这样一种方式,删除后,该图将仍然是强烈的连接和少成本的总和边缘。

我认为这是一个NP困难的问题。我在寻找一个最佳的解决方案,而不是近似,对于一个小组的数据,如20节点。

编辑

更一般描述:给虎视眈眈G(V E)找到一个图G'(V,E')如果存在一个路径从v1到v2比克还有一个路径之间v1和v2G'和总和每个ei在E'至少是可能的。因此它类似于找到一个最小相当的曲线图,只有在这里,我们要最大限度地减少的总和边缘权重,而不是总和的边缘。

编辑:

我的方法迄今为止:我以为解决使用TSP多次访问,但这是不正确的。我在这里的目标是要复盖每个城市,而使用成本最低的路径。因此,它更像盖设定问题,我想,但我不是很确定.我需要盖每个城市使用路径的总费用是最低的,所以访问已经访问过的路径多次不会增加成本。

有帮助吗?

解决方案

你的问题是被称为 最低跨越强烈子(二)曲线图 (区处)或者更一般地说,最低的成本生成的副(二)曲线和 NP-确实很难.还请参见另一个书: 501页480页.

我会开始与消除所有的边缘,不能满足三角形不平等-你可以消除边缘a->c如果要去一个->b>c比较便宜。这让我想起我的小匙,但不知道这是否导致任何地方。

我以前的回答是使用 朱刘/埃德蒙兹算法 其中解决了 信息请访问http:// 问题;作为Kazoom和ShreevatsaR指出,这并没有帮助。

其他提示

我会在一个动态规划的一种方式试试这个。

0-将图表到一个列表

-1-使在先前的列表,其中在删除一个不同的边缘对于每个新子图的每个曲线图中的新子图的列表

2-删除新列表副本

3-从非强连接新的列表中删除所有的图

从4-新列表与当前最好的,比较的最佳图形,如果较好,设定新的当前最佳

5-如果新的列表为空,当前最好的是溶液,否则,递归/循环/ GOTO 1

在Lisp中,它也许可以是这样的:

(defun best-subgraph (digraphs &optional (current-best (best digraphs)))
  (let* ((new-list (remove-if-not #'strongly-connected
                                  (remove-duplicates (list-subgraphs-1 digraphs)
                                                     :test #'digraph-equal)))
         (this-best (best (cons current-best new-list))))
    (if (null new-list)
        this-best
        (best-subgraph new-list this-best))))

strongly-connectedlist-subgraphs-1digraph-equalbest,和better的定义留给读者作为练习读者。

此问题等价于这里所描述的问题:的http:// WWW .facebook.com /职业/ puzzles.php?puzzle_id = 1

几个想法,帮助我解决了着名的facebull之谜:

预处理步骤:

  1. 修剪:删除所有的边缘a-b,如果有更便宜或有 同样的成本 路径,例如:a-c-b。

  2. 图分解:你可以解决子问题,如果图有关节点

  3. 合并的顶点到一个虚拟的顶点,如果只有一个出局的边缘。

计算步骤:

  1. 获得近似解决方案使用的针对TSP与重复访问。用弗洛伊德Warshall然后解决的分配问题O(N^3)使用匈牙利的方法。如果我们得到了一次周期的-这是针对TSP解决方案,如果不使用的分支和结茶匙。之后,我们有上限值的周期最低的成本。

  2. 确切的解决方案分支和束缚方法。我们删除了顶点从最短周期,并试图建立强连线图以较少的成本,比上限。

这就是所有的人。如果你想要测试你的解决方案的尝试在这里: http://codercharts.com/puzzle/caribbean-salesman

听起来像是你要使用的 Dijkstra算法

好像你基本上要的是它是允许节点被访问一次以上的旅行推销员的最佳解决方案。

编辑:

嗯。您可以通过基本遍历每个节点i,然后做所有边的最小生成树指向节点i,联合在一起的所有边缘的另一最小生成树指向解决这个远从该节点?

2逼近 最强连子 获得通过采取一个联盟的一个小的分支和最小的开支,都扎根在相同(但是任意的)的顶点。

一个 开支, 也被称为 信息请访问http://, 是一个向树植根在一个顶点跨越所有顶点.一个分支的同样具有反向边缘。这些可以发现,通过 埃德蒙兹'算法 在时间 O(五), ,并有加速到 O(E log(V)) (见的 wiki网页).甚至有一个 开放源执行情况.

原始参考对第2-近似结果是 纸的炸酱面和Frederickson, 但该文件是不可自由访问。

甚至还有一个第3/2号逼近通过阿德里安*维塔 (PDF), 但复杂得多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top