【问题标题】:Finding a long vertex-disjoint cycle in a graph在图中找到一个长的顶点不相交的循环
【发布时间】:2015-11-21 03:45:35
【问题描述】:

我有一个有 562 个顶点和 3961 个边的有向图(如果你好奇的话,边是http://a3nm.net/share/raw_graph_284374.txt),我想在这个图中找到一个循环,它不会两次通过同一个顶点并且长度一样长尽可能。

我知道这个问题是 NP 难的(通过减少哈密顿循环问题),但我并不真正关心找到 最长的循环,只是一个相当长的循环。一个简单的 DFS 实现可以找到长度为 100-200 的循环,但我确信有许多启发式方法和改进可以用来找到更长的循环。

是否有任何(开源)程序或库可以用来在这种大小的图中找到更长的循环?

【问题讨论】:

  • 对我的回答没有很好的建议,但是您链接的数据集有 562 个顶点和 3961 个边。我在 DFS 的尝试在这里找到了 ~200 个顶点的循环(每次都不同,因为我打乱了考虑边的顺序)。
  • 哦,抱歉,我测试的是错误的文件。我相应地编辑了问题。感谢您指出!

标签: algorithm graph cycle approximation hamiltonian-cycle


【解决方案1】:

我认为你可以简化你的问题。请注意,当一个循环失去一条边时,它会变成一条路径。所以,基本上,你可以这样做

1) 考虑每对节点 u,v。

2) 去除两个节点之间的边。

3) 求最长路径(或近似最长路径)https://en.wikipedia.org/wiki/Longest_path_problem

4) 被移除的边缘和路径的组合将为您提供一个较长的循环。

而且我认为,如果您尝试使用 BFS 使您的图成为 DAG(有向无环图),那么您可以解决线性时间和精确(没有近似值)中最长路径的问题。

【讨论】:

  • 感谢您的建议!你知道最长路径或近似最长路径问题的实现吗?
  • 我不知道近似情况,但我记得在《算法简介》一书(Coremen)中读过一些确切的情况
猜你喜欢
  • 2014-06-01
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多