【发布时间】:2010-12-31 12:37:21
【问题描述】:
来自这篇维基百科文章:
http://en.wikipedia.org/wiki/Hamiltonian_path_problem
哈密顿量的随机算法 在大多数图表上快速的路径是 以下:从随机开始 顶点,如果有则继续 邻居没去过。如果没有 更多未访问的邻居和路径 形成的不是哈密顿量,选择一个 随机均匀地相邻,并且 使用该邻居作为枢轴旋转。 (也就是说,为其添加一条边 邻居,并删除其中一个 来自该邻居的现有边,所以 以免形成循环。)然后,继续 算法在新的末尾 路径。
我不太明白这个旋转过程应该如何工作。有人可以更详细地解释这个算法吗?也许我们最终可以用更清晰的描述更新 Wiki 文章。
编辑 1: 我想我现在理解了这个算法,但它似乎只适用于无向图。谁能确认一下?
这就是为什么我认为它只适用于无向图:
alt text http://www.michaelfogleman.com/static/images/graph.png
假设顶点的编号如下:
123
456
789
假设我目前的路径是:9, 5, 4, 7, 8。 8 的邻居都去过。假设我选择 5 来删除一条边。如果我删除 (9, 5),我最终会创建一个循环:5, 4, 7, 8, 5,所以看来我必须删除 (5, 4) 并创建 (8, 5)。如果图形是无向的,那很好,现在我的路径是 9、5、8、7、4。但如果你想象这些边是有向的,那不一定是有效路径,因为 (8, 5) 是一条边但是 ( 5, 8) 可能不是。
编辑 2: 我想对于有向图,我可以创建 (8, 5) 连接,然后让新路径为 4, 7, 8, 5,但这似乎适得其反,因为我必须这样做砍掉之前通向顶点 5 的所有内容。
【问题讨论】:
-
哈密顿路径存在于无向图上(根据定义)。任何找到它们的算法都必须因此在无向图上运行。
-
嗯,维基百科的文章说:“哈密顿路径问题和哈密顿圈问题是确定给定图中(无论是有向还是无向)中是否存在哈密顿路径或哈密顿圈的问题。”基本上,我正在寻找在有向图中可以找到的最长的简单路径(没有多次访问的顶点)。现在看来这个算法帮不了我了。
-
维基百科中的不一致:“......哈密顿路径(或可追踪路径)是无向图中的路径,它只访问每个顶点一次。哈密顿循环(或哈密顿循环)是一个循环在一个无向图中,每个顶点只访问一次......"。
-
经过进一步思考,该算法可能仍然适用于有向图。考虑到顶点
A的邻居的概念被解释为“所有顶点X,其中存在一条边A->X”。 -
对,但是我们如何实现
FindEnd,正如您在伪代码中所说的那样?请参阅我的编辑 2。
标签: algorithm language-agnostic random graph