如何找到最大的欧拉子图?

时间:2016-10-08 10:09:32

标签: graph-algorithm graph-theory cycle subgraph

如何找到给定图的最大欧拉子图?通过"最大"我的意思是具有最大边数,顶点或两者的子图。我的想法是找到循环空间的基础并以适当的方式结合基础周期,但我不知道该怎么做(这是一个好主意或不是)。

UPD。已连接源图表。

1 个答案:

答案 0 :(得分:1)

一些想法。图是欧拉,如果它是连接的(可能是孤立的顶点),并且所有顶点都有均匀度。

通过去除奇数度顶点对之间的(最短)路径来“满足”第二个标准是“容易的”。

连接是有问题的,因为删除边缘会产生未连接的图形。

显示“简单”(贪婪)解决方案不易生成的示例。通过在两个边(或更多)中分割每个边来修改完整图K5。取两个这些修改过的K5图并从每个图中取两个顶点(A,B来自第一个,C,D来自第二个)。连接A-C和B-D。贪婪的方法将删除这些添加的边缘,因为它们是最短的路径。随着该图形变得无关。解决方案是删除路径A-B和C-D。

在我看来,算法应该在删除边缘时注意子图连接。确保算法应该保留奇度顶点的每个子集,其中没有用于删除它们之间的路径,应该具有大于子集基数的连通性。

我会尝试使用具有优化功能的递归强力解决方案(进行测试)。 O是奇度顶点的列表。

def remove_edges(O, G):
  if O is empty:
    return solution
  for f in O:
    for t in O\{f}":
      G2 = G without path edges between (f,t)
      if G2 is unconnected:
        continue
      return remove_edges(O\{f,t}, G2)

优化可以是通过具有最短路径的顶点对集合O和O {f}进行排序。这可以通过在去除边缘之前在O的所有顶点对之间找到最短长度来完成。这可以通过BFS从每个O顶点完成。