图形边缘遍历算法,需要一些边缘,一些可选

时间:2012-03-21 07:48:05

标签: algorithm graph language-agnostic traversal

我有一个无向图,所有顶点均匀度。在此图中,有一组边必须恰好覆盖一次,并且除非绝对必要,否则根本不应覆盖一组边。我需要在图中找到一组一条或多条路径,这样所有需要的边都只被覆盖一次,并且遍历的不需要的边的数量被最小化。多个路径不能遍历所需的边缘,但可以通过任意数量的路径遍历不需要的边缘。它不是一条欧拉路径,因为它有可选的边缘。

每个单独路径的长度受到它可以覆盖的最大所需边数的限制,尽管路径可以覆盖任意数量的不需要的边缘。

起点和终点不必相同,但有一组可能的起点。

一些不需要的边缘与所需的边缘重合 - 也就是说,一对顶点可能同时具有所需的边缘和不需要的边缘(尽管每种类型的边缘之间永远不会有多个边缘)给定顶点对。)

开始时有什么好的算法?从根本上说,我正在寻找一种算法,该算法可以找到一条路径,该路径只需要一次遍历所需的边缘,并在可能的情况下避免不需要的边缘(但如果需要,可以多次遍历它们)。我可以在此基础上做其余的事情。

3 个答案:

答案 0 :(得分:3)

您正在寻找原始图形中的子图,使其包含所有必需的边,并且包含最少的不需要的边,使其包含欧拉路径。

众所周知,图形包含欧拉路径,当且仅当它是连接且具有偶然度的所有顶点(除了2)。这可以通过执行以下操作来确保:

  • 首先直接在最终子图中包含所有需要的边。您现在拥有一个包含一个或多个连接组件的图表。

案例1:

  • 如果此子图中的组件数为1,(即,所有边彼此连接),我们只需要确保所有顶点(2除外)具有均匀度。由于您的原始图形确实具有均匀度的所有顶点,因此可以执行此操作,但我们还要注意为实现此目的而添加的边数最小(因为只留下不需要的边缘)。

  • 这是一种很好的启发式方法,从每个奇度顶点开始,然后进行BFS(广度优先搜索),直到到达另一个奇数度的顶点。对所有奇度顶点执行此操作,选择2个顶点,它们之间采用最大不需要的路径来实现此目的,并删除此路径。现在图表将有一个欧拉路径

(有一点需要注意的是,这样的奇数顶点配对总是可行的,因为没有图形可以有奇数度的奇数顶点)

案例2:

  • 仅包含所需边的子图具有多个组件。要确保连接,请执行以下操作 - 使用具有最小顶点数的组件。从每个顶点执行BFS,并选择将此组件连接到任何其他组件的最小长度路径。

  • 重复此过程,直到所有组件合并为一个组件。现在,为了均衡,请遵循之前针对CASE 1所述的程序。

答案 1 :(得分:1)

我认为这可以归结为旅行商问题。创建一个转换图形,其中节点表示强制边缘,边缘权重表示必须遍历从一个强制边缘到另一个强制边缘的可选边缘的数量。

现在的问题是找到这个转换图中最短的路径,它通过所有节点(也就是强制边缘)。这是TSP,它是NP难的。

会有一些复杂因素,因为在强制性边缘之后你可以采取的路径取决于你采取它的方向。您可以通过将每个强制边缘转换为两个节点来解决此问题,每个节点对应一个节点。然后,TSP必须访问每对中的一个节点。

e.g。

A===C
|  /
| /             (edges A<->B and B<->C are compulsory, A<=>C is optional)
|/
B

转换图:
节点= {AB,BA,BC,CB}
边缘= {AB - &gt; BC(成本0),BA - &gt; CB(成本1),CB - &gt; BA(成本0),BC - &gt; AB(费用1)}

答案 2 :(得分:1)

这是NP难题:汉密尔顿路径问题的一个实例可以转换为你的问题的一个实例。因此,如果你知道如何解决问题,你就知道如何解决汉密尔顿路径问题。

要进行变换,请采用有向图并将每个顶点加倍,例如,将其加倍为红色和蓝色顶点。对于每个前顶点,使所有入站边都转到红色顶点,并且所有出站边都离开蓝色顶点。从红色到蓝色顶点创建一个新边。显然,如果您可以解决此图的哈密顿循环问题,则可以对原始图进行求解。

现在标记所有新边缘,所有旧边缘都是可选的。将单个红色顶点标记为可能的入口点。如果有问题的解决方案,则它由单个路径组成,该路径是原始图形的哈密顿路径。