【问题标题】:Minimum number of total paths in a connected graph连通图中的最小总路径数
【发布时间】:2020-08-18 07:09:00
【问题描述】:

我在 TopCoder 上查看 PenLift 问题,在阅读 this editorial 之后,我现在明白了如何做到这一点,但是有一件事我不明白。

一个众所周知的定理指出,遍历连通图中的所有边需要 numOfOddVertices/2 个总路径。

这是什么理论?还有为什么会这样?我的第一个想法是通过添加边来找到欧拉路径,使所有顶点除了 2 之外的度数都是偶数,因为这将允许欧拉路径。我不确定这是否正确,如果正确,我怎么知道这是最好的方法,这似乎很贪婪,但我没有看到任何证据。有人可以将我链接到理论或解释它是如何工作的吗?提前致谢。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    这是什么理论?

    图论。

    还有为什么会这样?

    我们需要假设至少一对奇数度的顶点。

    下界:归纳证明具有 2k 个奇数度顶点的图至少需要 k 个路径。基本情况 k = 1:微不足道。步骤 k > 1:从具有 2k 个奇数度顶点的图中移除一条路径,至少会留下 2k-2 = 2(k-1) 个奇数度顶点。

    上限:用连接成对不相交的奇数度顶点对的 k 条边来扩充图。现在所有顶点的度数都是偶数,所以存在欧拉回路。从此电路中删除新边;剩下 k 条路径。

    【讨论】:

      【解决方案2】:

      在图中,奇数顶点 (n) 的数量始终为零或偶数。如果 n = 0,您可以从任意点开始遍历整个图形。如果 n > 0,要遍历图,您应该始终从一个奇数顶点开始,然后您将从另一个奇数顶点结束。假设你连续绘制的路径数是 K。

      • 如果 n = 2,您仍然可以一次性遍历图表。即从一个奇数顶点开始,在另一个顶点结束。 K = 1
      • 如果 n = 4 遍历一次后,您将留下一个具有 2 个奇数顶点的子图。您可以一口气遍历该子图。 K = 2
      • 如果 n = 6,您将不得不遍历图表 3 次。 K = 3 等等.....

      请阅读我的博文了解更多信息。 http://jeewanthad.blogspot.com/2012/11/eulerian-trail.html

      【讨论】:

      • "如果 n = 4 遍历一次后,您将留下一个具有 2 个奇数顶点的子图。您可以一次性遍历该子图" 您必须小心不要断开组件具有所有偶数度的顶点。
      • 是的。当 n = 4 时,K 至少为 2。
      【解决方案3】:

      首先,原问题中提出的方法当然是正确的:将除两个以外的所有奇数顶点配对,在每对之间添加一条边,然后计算欧拉路径。添加的边对应于最终遍历中的移动。

      如果希望尽量减少笔式绘图仪或类似设备的运动,请考虑以下事项:绘制线条的运动始终等于边长的总和,因此保存运动的唯一方法是尽量减少运动。添加的边表示移动,因此目标是以最小化添加边的长度的方式配对奇数顶点。这实际上是一个众所周知但相当困难的问题,称为“一般图上的最小成本完美匹配”(注意,general 图,而不是 bipartite)。有一种称为 Blossom 算法的算法可以在 O^3 时间内解决它,但我从未找到完整算法的令人满意的描述——所有这些都相当模糊和令人困惑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-11
        • 2016-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多