【问题标题】:Proof of Correctness of an Algorithm for Finding a Hamilton Path in a DAG在 DAG 中寻找汉密尔顿路径的算法的正确性证明
【发布时间】:2018-12-12 13:04:40
【问题描述】:

我正在尝试设计一种在 O(n+m) 时间内运行的算法,以确定给定的有向无环图中是否存在哈密顿路径。

这是解决这个问题的算法:

对 DAG 进行拓扑排序,然后检查排序中的连续顶点是否在 图形。如果是这样,拓扑排序给出了哈密顿路径。另一方面,如果存在哈密顿量 路径,则路径给出了 DAG 的拓扑排序。

现在我不知道如何证明它的正确性并找出它的空间复杂度。任何帮助将不胜感激。

【问题讨论】:

标签: algorithm directed-acyclic-graphs space-complexity correctness proof-of-correctness


【解决方案1】:

实际上,您几乎已经证明了这一点。您的证明中缺少的部分是表明如果 DAG 具有哈密顿路径,那么拓扑排序算法必须找到它,因为没有其他方法可以将节点按拓扑排序顺序:

假设有一条哈密顿路径。让uv 是任意两个节点,并且不失一般性地假设u 在哈密顿路径中出现在v 之前。然后有一条从uv 的路径由uv 之间的哈密顿路径中的节点形成,因此u 必须以任何拓扑排序顺序出现在v 之前。

因此,拓扑排序顺序中的所有节点对具有与哈密顿路径中相同的相对顺序。因此,如果节点是拓扑排序的,那么它们与哈密顿路径的顺序相同。

因此,如果存在哈密顿路径,运行任何拓扑排序算法都会找到它。逆是相当微不足道的。如果没有哈密顿路径,那么拓扑排序当然不会找到。


关于空间复杂度,这将与拓扑排序算法的空间复杂度相同,因为检查结果是否为哈密顿路径的第二阶段需要 O(1) 额外空间。标准拓扑排序算法的空间复杂度为 O(n),其中 n 为顶点数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2011-07-17
    • 2014-11-01
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多