我正在考虑对最短哈密顿路径(SHP)问题的扩展,我找不到解决它的方法。我知道它是NP完全的,但我想我会在这里征求意见,因为我不想简单地强行解决这个问题。
扩展非常简单:给定一个带 n 顶点的无向完整加权图,找到最短的哈密尔顿路径,其末端顶点 v 和 u < / em>的
因此,bruteforce仍会占用O( n !)时间,因为可以访问剩余的 n -2顶点( n -2)!方法。我试图找到一种方法可以更快地解决这个轻微。到目前为止,我努力寻找以有益的方式解决这个问题的方法毫无结果。
有人会知道如何利用终点顶点的知识吗?优选地与一些伪代码一起解释。找到的解决方案是最佳的。
我想它可以通过整数编程来解决,因为终端节点的知识是相当有限的,并且可以很容易地避免循环,但它不会真正利用问题的组成。
答案 0 :(得分:6)
如果要查找连接所有节点的最短路径,则应查看travelling salesman算法。我不确切地知道为什么你作为HSP接近它。我能想到的唯一原因是你想要指定你的起始城市,但是通过稍微改变一下你应该很容易解决这个问题(如果你需要我可以发布)。
编辑:添加如何调整图表
添加1个节点(称之为E)并仅将其连接到起始节点和结束节点。 TSP将通过连接所有节点来计算问题的解决方案。由于E只能通过从开始到E再到结束来到达,所以解决方案(循环是)将包含start-E-end。然后从E中移除2个边缘并获得最佳解决方案。在TSP中,从开始到结束的路径将是最佳的。
答案 1 :(得分:0)
您可以使用元启发式算法。它们有很多种(本地搜索,建设性搜索等)。其中一个可以基于:
对于属于顶点集X的每个x:
- 找到最接近x C的顶点集
- 过滤集合C以便在路径P中包含其中一个
重复直到X的所有顶点都包含在路径P中
端。