使用 oracle 机在多项式时间内找到哈密顿路径
Find Hamilton path in a polynomial time using oracle machine
假设你有一个 oracle 可以确定(在多项式时间内)某个图中是否存在汉密尔顿路径。 (提示:汉密尔顿路径问题在NPC)。
描述如何使用 oracle 在多项式时间内找到图中的哈密顿路径。
有什么想法吗?
哈密顿路径恰好访问每个顶点一次。
如果你有一个 oracle,你可以测试依次移除每条边。如果 oracle 说还有一条路径,则保留删除边,否则恢复边并尝试下一个。
一旦你遍历了所有边,剩下的就是哈密顿路径。
如果图中有n - 1条边,我们就完成了(它必须是一条链。否则,就没有哈密顿路径)。
否则,我们可以删除一些边。让我们遍历所有边缘。如果图中还有一条没有固定边的路径,我们可以将其移除并继续前进。
这个解决方案需要 O (m^2) 次 oracle 查询,所以它在多项式时间内工作。
假设你有一个 oracle 可以确定(在多项式时间内)某个图中是否存在汉密尔顿路径。 (提示:汉密尔顿路径问题在NPC)。
描述如何使用 oracle 在多项式时间内找到图中的哈密顿路径。
有什么想法吗?
哈密顿路径恰好访问每个顶点一次。
如果你有一个 oracle,你可以测试依次移除每条边。如果 oracle 说还有一条路径,则保留删除边,否则恢复边并尝试下一个。
一旦你遍历了所有边,剩下的就是哈密顿路径。
如果图中有n - 1条边,我们就完成了(它必须是一条链。否则,就没有哈密顿路径)。
否则,我们可以删除一些边。让我们遍历所有边缘。如果图中还有一条没有固定边的路径,我们可以将其移除并继续前进。
这个解决方案需要 O (m^2) 次 oracle 查询,所以它在多项式时间内工作。