我正在尝试设计一种在O(n + m)时间内运行的算法,以确定给定有向无环图中是否存在哈密顿路径。
这是解决此问题的算法:
执行DAG的拓扑排序,然后检查该排序中的连续顶点是否已连接 图形。如果是这样,则拓扑排序将给出哈密顿路径。另一方面,如果有哈密顿量 路径,则该路径给出了DAG的拓扑类型。
现在我不知道如何证明其正确性以及如何找出其空间复杂性。任何帮助将不胜感激。
答案 0 :(得分:0)
实际上,您几乎已经亲自证明了这一点。证明的缺失部分是表明,如果DAG具有哈密顿路径,则必须按拓扑排序算法 进行查找,因为没有其他方法可以将节点按拓扑排序的顺序放置:
假设存在哈密顿路径。令
u
和v
为任意两个节点,并假设在哈密顿路径中u
出现在v
之前,这并不失一般性。然后,从u
到{{1}之间的哈密顿路径中的节点形成了一个从v
到u
的路径,因此v
必须在{{1 }},以任何拓扑排序的顺序。因此,按照拓扑排序顺序的所有节点对都具有与哈密顿路径中相同的相对顺序。因此,如果对节点进行拓扑排序,则它们与哈密顿路径的顺序相同。
因此,如果存在哈密顿路径,运行任何拓扑排序算法都会找到它。反之则微不足道。如果没有哈密顿路径,则当然不会找到拓扑排序。
关于空间复杂度,这将与您的拓扑排序算法的空间复杂度相同,因为检查结果是否为哈密顿路径的第二阶段将占用O(1)额外空间。标准拓扑排序算法的空间复杂度为O(n),其中n是顶点数。