java - 如何获得近似解以获得通过所有节点的最短路径

标签 java algorithm path shortest-path

<分区>

有人知道算法或什么东西可以做到这一点吗

所以我有与弧连接的节点,我必须找到一个解决方案来找到覆盖所有节点的近似最短路径。 (我只能拜访一次)

它必须是一个近似路径,因为它需要很长时间才能得到最短路径

感谢您的回答:)

(我必须在 java 中这样做)

最佳答案

这被称为 Travelling Salesman Problem一个合理且快速的近似方法是始终访问最近的未访问节点,然后在其他几个起始位置重试。通常,这会让您非常接近最佳解决方案。

另一种算法是先构造图的最小生成树,然后删除重复的节点。这保证了次优性的一定上限(在欧几里德情况下不超过两倍,(wikipedia))

另一种算法是从前三个节点开始,然后通过拆分现有边(或添加新边)以某种顺序添加下一个节点(初始、按 x 坐标排序、按距中心的距离排序...)最后,在最短路径的情况下)同时保持路径尽可能短。

一旦你有了一个解决方案(即使是一个糟糕的解决方案),你可以通过 K-opt 改进它:重复选择 K 个随机边缘,完全删除它们并找到重新连接新端点的最佳方法。 K-opt 的一个变体是 Lin-Kerningham将 2-opt 步骤与 3-opt 步骤(按某种顺序)交替进行的启发式算法,其中三个边中的两个始终相邻。

如果大部分边缺失或很长(两个节点之间的距离不构成度量),那么您就有问题了。我们只是说它是 NP 完全的,如果有缺失的边,确定这样的路径是否存在。

关于java - 如何获得近似解以获得通过所有节点的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541023/

相关文章:

java - 如何让 JUnit 对打开的多个选项卡/窗口但只有一个 session 进行建模

java - 将 Mongo 聚合查询转换为 java 对象

java - 列出 16x16x16 矩阵中可能存在的最大长方体

jquery - .load() 和相对路径

php - 使用 "./"的相对路径

java - 如何在java中获取字符串/字符的高度?

java - 如何在Java中格式化CSV的行和列

sql - 通过重新排序行和列来对二维表进行排序

c - 算法每行中的计算/步骤数

c# - Asp.net Web API 无法从文件路径读取文件