Algorithm 构造一个包含哈密顿路径的图

Algorithm 构造一个包含哈密顿路径的图,algorithm,optimization,graph-theory,hamiltonian-cycle,Algorithm,Optimization,Graph Theory,Hamiltonian Cycle,背景我正在研究一个优化问题,并设法将问题简化为检查图形是否包含哈密顿路径。减少的问题如下: 问题我们得到了一系列边(例如:e[1,5],e[3,4],…,e[2,3])。我们需要找到从这个序列开始的边的数目,这样使用这些边形成的图就包含一个哈密顿路径。我们还需要返回路径 我的算法这个问题可以从一个没有边的图开始解决。我们一个接一个地插入边,并在每次迭代中检查图是否包含哈密顿路径。通过使用哈密顿路径存在的必要条件,可以使这种方法更快一些。尽管如此,该算法仍然相当低效 一个大问题有没有一种方法可以更

背景我正在研究一个优化问题,并设法将问题简化为检查图形是否包含哈密顿路径。减少的问题如下:

问题我们得到了一系列边(例如:
e[1,5],e[3,4],…,e[2,3]
)。我们需要找到从这个序列开始的边的数目,这样使用这些边形成的图就包含一个哈密顿路径。我们还需要返回路径

我的算法这个问题可以从一个没有边的图开始解决。我们一个接一个地插入边,并在每次迭代中检查图是否包含哈密顿路径。通过使用哈密顿路径存在的必要条件,可以使这种方法更快一些。尽管如此,该算法仍然相当低效

一个大问题有没有一种方法可以更有效地解决这个问题(可能是通过使用在早期迭代中完成的计算来加速后期迭代)?

我建议使用来解决这个问题。我将坚持使用框架,但您可以考虑其他选项,例如

让我们介绍一组表示图中每个顶点的布尔变量:

v_0,v_1,…,v_N

接下来,让我们引入一组布尔变量来表示每个可能的边(显然是N^2):

e_0,e_1,…,e_{N^2}

查看详细信息

当且仅当图中存在对应的顶点/边时,布尔变量X为True。在您的情况下,我们讨论的是边

此时,您可以尝试将边选择算法作为一组布尔约束引入:

  • 如果顶点v_i的阶数为D,则边E必须存在
  • 如果存在v_i和v_j之间的边,则边E必须不存在
  • 您可以依靠引入此类约束

    如果对输入变量有这样的赋值,结果布尔公式返回True(满足要求),则可以将此赋值设置为包含哈密顿路径的图形,并由给定的规则集(约束)构建。您可以使用SAT解算器(例如,查找此类作业)

    我使用了类似的方法来解决10^5个变量和10^6个约束的实际问题。这可能会耗费大量的时间和内存,但它比暴力要好得多,而且更加灵活:您可以轻松地添加/删除其他约束,而无需修改代码

    我看到了一些缺点:

  • 在您的情况下,这种方法可能没有那么大的可扩展性。结果在很大程度上取决于问题本身,因此很难预测
  • 将图形构建过程编码为一组布尔约束是一项非常重要的任务
  • 本质上,SAT解算器返回随机赋值。如果你想看到其他解/图,你必须为你的问题添加新的约束
  • 我的算法可能并不完美,但如果您不知道如何准确地构建结果(因此除了暴力之外,没有明确的算法来实现),约束满足性工具包是非常有效的方法

    编辑:


    如果一个图是加权的,你仍然可以使用SAT来解决这个问题,但这将是非常困难的:权重应该在给定的范围内,并且应该是离散的。但是,你可以考虑< /P>你有更多的关于步骤2是如何完成的信息吗?更具体地说,如何选择要添加的边?N有多大?有什么估计吗?inTrunky现在我正在研究N大约为100的问题,但我最终想解决N可以为10的问题^4@justhalf请看我对这个问题的编辑。这个答案提供了一种用哈密顿路径构造图的方法。我意识到我对这个问题的说明有点不清楚。我有edited问题,请看一下更新的版本。我试图解决的是检查图是否有哈密顿路径,而不是构造这样的图。@LakshayGarg您可以或多或少地使用相同的方法来检查是否有哈密顿路径。我很好奇,您真的需要增量构建图吗?我的方法允许你只需要单步构建。不,没有必要以增量方式构建图,但我不确定如何在SAT中包含最小路径权重约束。此外,对于我正在处理的问题,我相信插入边的序列将非常接近最小权重哈密顿路径。我会仍然尝试实施您的方法,看看它是否更有效。@LakshayGarg您可以使用混合整数规划来解决相同的问题。它更适合处理权重。或者您可以尝试最大满意度方法,但这将非常困难。