Algorithm 边数受限的循环有向图的最长路径

Algorithm 边数受限的循环有向图的最长路径,algorithm,graph,graph-algorithm,Algorithm,Graph,Graph Algorithm,我有一个带圈的有向图。这个图最重要的部分是,每条边都有一个限制,限制它可以被传递多少次,然后它应该变得“不可用” 我怎样才能找到一条最长的路呢?任何信息或链接或评论将不胜感激。谢谢大家! 不幸的是,这个问题是,这意味着不太可能存在一个“快速”算法(可以在多项式时间内解决每个实例);您需要要么满足于不能保证找到最优解决方案的快速启发式,要么使用指数时间算法,该算法只能在合理的时间内解决小实例 我将通过将NP完全问题(HP)简化为您的问题来说明这一点。简单地说,这个想法是:如果存在某种算法可以“快速

我有一个带圈的有向图。这个图最重要的部分是,每条边都有一个限制,限制它可以被传递多少次,然后它应该变得“不可用”


我怎样才能找到一条最长的路呢?任何信息或链接或评论将不胜感激。谢谢大家!

不幸的是,这个问题是,这意味着不太可能存在一个“快速”算法(可以在多项式时间内解决每个实例);您需要要么满足于不能保证找到最优解决方案的快速启发式,要么使用指数时间算法,该算法只能在合理的时间内解决小实例

我将通过将NP完全问题(HP)简化为您的问题来说明这一点。简单地说,这个想法是:如果存在某种算法可以“快速”解决问题的每个实例(意思是多项式时间),那么它也可以用作子例程来解决HP的每个实例——这似乎不太可能,因为没有人知道如何在多项式时间内解决HP(或任何NP完全问题),尽管进行了几十年的CS研究

在HP中,我们得到了一个有向图G=(V,E),任务是确定是否有一条路径恰好访问所有| V |顶点一次。给定此问题的一个实例,我们可以按如下方式构造问题的一个实例G':

  • 将每个顶点v替换为三个顶点v_in、v_mid和v_out,将所有in边更改为v to in边更改为v_in,并将所有out边从v更改为out边从v_out;将这些边称为“乌木边”(它们对应于G中的边)。还可以添加从v_-in到v_-mid和从v_-mid到v_-out的边;将这些边称为“天鹅绒边”(它们对应于G中的顶点)
  • 为每条边指定1的通过限制
此图中存在长度为3 | V |-1的路径当且仅当原始图G中存在哈密顿路径时:

“如果”方向:假设G包含哈密顿路径。这对应于构造图中长度为3 | V |-1的路径,该路径以一对天鹅绒边开始和结束,并在天鹅绒边和乌木边之间以图案vveve…EVV交替

“仅当”方向:假设在构造的图中存在长度为3 | V |-1的路径p。每条边上的通过限制为1,因此每条边在此路径中最多显示一次。P必须具有以下边缘图案之一:

  • vveve…EVV
  • 维维…维维
  • 埃维…埃维

  • 在每种情况下,p至少遍历与G中每个顶点对应的两条Velve边中的一条,因此对应于G中的哈密顿路径。

    看起来在遍历时需要向每条边添加访问计数器。你试过了吗?发生了什么事?还没有,我首先想要一些关于如何着手开发算法的理论指导。你就在这里(访问计数器)。我想你应该回到绘图板上来。注意:在这里,要求链接到非站点资源基本上是离题的。请展示你的研究成果。