Java 寻找加权有向图中的圈去除算法

Java 寻找加权有向图中的圈去除算法,java,cycle,graph-theory,Java,Cycle,Graph Theory,设G是一个含圈的加权有向图。我正在寻找一种算法,通过删除循环的最小权重边来查找和删除这些循环 我想我可能会做几个DFS,但我想知道是否还有更完善的解决方案 感谢您的帮助:)您试图解决的问题称为(最小)反馈弧集。这是一个NP难问题,因此你不会找到任何有效的、确定的、最优的算法。此外,还没有已知的“好”近似算法。如果你知道你的反馈弧设置得很小,那么有一个FPT算法。有关详细信息,请参阅 不过,反馈弧集的启发式算法是一个活跃的研究领域。这篇论文似乎是一个很好的起点:这可能是重复的(因为在你有一个周期后

设G是一个含圈的加权有向图。我正在寻找一种算法,通过删除循环的最小权重边来查找和删除这些循环

我想我可能会做几个DFS,但我想知道是否还有更完善的解决方案


感谢您的帮助:)

您试图解决的问题称为(最小)反馈弧集。这是一个NP难问题,因此你不会找到任何有效的、确定的、最优的算法。此外,还没有已知的“好”近似算法。如果你知道你的反馈弧设置得很小,那么有一个FPT算法。有关详细信息,请参阅


不过,反馈弧集的启发式算法是一个活跃的研究领域。这篇论文似乎是一个很好的起点:

这可能是重复的(因为在你有一个周期后移除最小加权边似乎很简单):但是,我不会标记,因为可能有算法将这两个步骤结合起来……你确定你的问题是明确定义的吗?考虑4个路径段<代码> pII,i=1…4 /代码>除它们的端点之外,其中<代码> pY1,<代码> pY2< /代码>链接顶点<代码> v< /代码> <代码> w < /代码>和<代码> pY3,<代码> PY4< /代码>连接<代码> W<代码>代码> V>代码>代码>。同样假设
p_1
p_3
每个都包含具有全局最小权重的恰好2条边中的一条。根据您是否考虑<代码> C1= {Py1,Py3},C2= {Py2,Py4} < /C>或<代码> C1′={Py1,Py4},C2′={Py2,Py3},您将移除不同的边,并以不同的无循环图的总重量结束。检查此算法:尽管它对小图有用,而且可能要花很长时间才能完成大型问题。这个问题似乎是针对未加权有向图的,因此加权图的版本也必须是NP难的,但不是完全相同的问题。哦,是的,我显然过火了问题中的“加权”。因此,问题是“加权反馈弧集”。)仍然是NP难的,仍然没有很好的近似值,但是我担心可能会有更少的启发式。