Algorithm Crab图,算法,图论,这个网络流是怎样的?

Algorithm Crab图,算法,图论,这个网络流是怎样的?,algorithm,graph,graph-theory,network-flow,Algorithm,Graph,Graph Theory,Network Flow,有人能帮我解决这个问题吗?解决方案显然是使用网络流,但我不太熟悉网络流。网络流如何帮助您解决这个问题 螃蟹是一个无向图,它有两种顶点:1个头部和K个脚,以及将头部连接到每个腿的K条边。(1这是一个问题。对于图的顶点覆盖,蟹头是顶点覆盖的顶点,脚是连接到这些头部的顶点。应移除重复的脚,同时注意不要移除一只蟹头的所有脚:-) 更新: 最小顶点覆盖是NP完全的,有什么不好:-)我认为crab覆盖是等价的。至少有最小螃蟹覆盖,我们可以得到最小顶点覆盖。所以,若最小crab不是NP完全的,那个么最小顶点覆

有人能帮我解决这个问题吗?解决方案显然是使用网络流,但我不太熟悉网络流。网络流如何帮助您解决这个问题

螃蟹是一个无向图,它有两种顶点:1个头部和K个脚,以及将头部连接到每个腿的K条边。(1这是一个问题。对于图的顶点覆盖,蟹头是顶点覆盖的顶点,脚是连接到这些头部的顶点。应移除重复的脚,同时注意不要移除一只蟹头的所有脚:-)

更新:

最小顶点覆盖是NP完全的,有什么不好:-)我认为crab覆盖是等价的。至少有最小螃蟹覆盖,我们可以得到最小顶点覆盖。所以,若最小crab不是NP完全的,那个么最小顶点覆盖也不应该是NP完全的


让我们证明具有最小crab覆盖可以得到最小顶点覆盖。在标准的方法中,我们得到了带有蟹头的顶点覆盖。相反,假设有一个次较低的顶点覆盖,覆盖中的顶点比蟹头更少。对于该顶点覆盖,我们可以构造具有相同阶数的蟹状覆盖,除了我们不确定是否存在没有脚的蟹状覆盖,因为移除了重复的脚。只有当有一个头部和另一个头部共用脚,而另一个头部没有其他脚时,情况才会如此。在这种情况下,我们可以通过移除这两个头并将头放在关键的脚上来构造更小的顶点覆盖。我们有一个矛盾,所以没有顶点较少的顶点覆盖。所以最小蟹状覆盖也是一个最小顶点覆盖。

用顶点覆盖方法解决上述问题,得到了指数tim算法 但这可以通过使用Ford Fulkerson算法最大化流量来解决 上述问题可以用福特富尔克森解决

  • 创建一条从源(0)到图中所有节点的路径,其容量为t
  • 创建从所有节点到容量为1的目标(1)的路径
  • 使用Ford Fulkerson找到上述修改图的最大流
  • Ford-Fulkerson算法在给定图中求最大流

  • 在图中查找从源到目标的路径
  • 找到沿路径的最小流量
  • 通过上面计算的最小流量,增加沿路径的所有边的流量
  • 存储路径的最小流
  • 重复上述4个步骤,直到无法增加路径

    福特·富尔克森·阿洛格里姆的解释 选择一条可能的路径并确定容量最小的边。 记下这个号码 从该路径上的每个数字中减去该数字。这是路径上每条弧的新容量。 选择另一条路线,再次重复步骤1,记录最小容量。 重复此操作,直到用尽所有可能的路径。 添加所有路线的最小容量。这是网络的最小承载能力

    参考文献


    思考如何将网络流应用于这个问题。 这应该是一种从螃蟹头到脚的流动。到达头部的流量应该有一个等于英尺数的值,螃蟹头部到脚的每一个边缘应该有一个容量

    我们如何才能做到这一点? 这肯定是很难做到这一点,但我希望在看到多次的例子,你可以得到这个窍门

    我们必须创建一个新的图,其中原始顶点是重复的。 一组可以让每个顶点都有机会成为头部,另一组可以充当脚。 记住这一点,精确的算法可以写成如下:-

    1. We create a new graph where original vertices are duplicated (vertex i  becomes 2*i (head set) and 2*i+1  (feet set)    ).
    
    2.For i and j vertices connected in original graph make sure that 2*i and 2*j+1 plus 2*j and 2*i+1 gets connected in new graph with capacity 1.
    
    3.source vertex (S) is connected to each 2*i vertex(head set) with capacity min(T, degree).
    4. Each 2*i+1(feet set) vertex is connected to target vertex (T) with capacity 1
    5. Maxflow is the answer.
    
    下面的图片可以很好地展示图形的形成方式。

    对第3点的解释:-耳机中的每个顶点都应与具有最小容量(t,度)的源连接,因为如果我们希望此边缘的最大流量与t一样大,不超过这一点,因为螃蟹的脚不能超过t英尺,这里的容量值也受到0连接到的顶点的程度的限制。头上的脚不能超过它的度数

    对第4点的解释:-为确保成对不相交,以便每个顶点仅位于一个蟹状体中,每只脚都以容量1连接到图中的目标10


    如果需要,我可以发布代码。

    有趣的是,我不知道为什么我没有想到这一点。我会马上给你答复。非常感谢!我知道有一个解决方案使用网络流量算法的特别是福特福克逊。如果有人知道这是为什么,我仍然很好奇,因为我不太熟悉网络流量,并想了解更多,谢谢大家!使用顶点覆盖也是困难的,因为它是一个np完全问题。鉴于网络flo并非每个人都是。请注意,这是。哪些节点是源节点和目标节点?由此产生的流量与螃蟹的数量有什么关系?这对我来说没有意义。如果像这样修改图形,那么max flow将始终是节点数。为什么这里要解释max flow算法?我可以查一下;我对蟹状图解决方案感兴趣。:)它没有解释如何解决螃蟹问题。为什么这个答案被接受?这是我在StackOverflow上见过的最误导人的答案之一。请阅读machaxX的答案。没有提供给定问题的解决方案,也没有提供任何支持性的解决方案。如果必须创建crab图,请发布代码。我在创作中面临一些问题。这就是为什么流的结果对于某些输入是不一致的。谢谢
    1. We create a new graph where original vertices are duplicated (vertex i  becomes 2*i (head set) and 2*i+1  (feet set)    ).
    
    2.For i and j vertices connected in original graph make sure that 2*i and 2*j+1 plus 2*j and 2*i+1 gets connected in new graph with capacity 1.
    
    3.source vertex (S) is connected to each 2*i vertex(head set) with capacity min(T, degree).
    4. Each 2*i+1(feet set) vertex is connected to target vertex (T) with capacity 1
    5. Maxflow is the answer.