【问题标题】:Travelling Salesman : How could one preprocess a graph?旅行推销员:如何对图形进行预处理?
【发布时间】:2023-03-03 14:01:02
【问题描述】:

假设我们要计算给定的完整图 G 的 TSP,该图具有 V 个顶点和 E 条边(我的意思是完整的:每个顶点都与每个其他顶点相连)。


我会再次尝试提问。希望这次我能做对。 我的目标很简单:
对于这个完整的图 G,如何过滤掉一些可能不在图中的边?

【问题讨论】:

  • 预处理不会为您节省任何时间,因为 TSP 是一个 NP 完全问题。您还有其他目标吗?
  • 您尝试执行此“预处理”的上下文是什么,排序与此有什么关系?
  • 时间不是问题,内存是……我正在使用 MST 启发式算法,并以排序方式遍历 MST。如果您想了解更多详细信息,我可以将其添加到帖子中,但这不是问题的重点。我只对预处理技术感兴趣。
  • 切边的目的是什么? TSP 是在完整图上定义的,所以我们通常会反过来:用w=infinity 在图中添加边,使其适合问题。
  • 我不会讨论为什么预处理很方便。那不是问题。我只是想知道在什么情况下可以切边。我不明白为什么有人会对此投反对票。这是一个简单的问题,可能很多人都有答案,虽然我似乎无法通过谷歌搜索找到任何伪代码。

标签: algorithm graph traveling-salesman


【解决方案1】:

Keld Helsgaun's implementation of Lin-Kernighan 将边 e 的质量测量为 [包括 e 的 1-tree 的最小成本] - [1-tree 的最小成本](越低越好)。请参阅第 4.1 节。

【讨论】:

    【解决方案2】:

    没有有效的方法来决定是否在解决方案之旅中使用边缘。如果有,那么通过问题固有的自我简化性,您可以通过检查每个边是否依次是解决方案之旅的一部分并在答案是否定的情况下移除边,从而在多项式时间内解决整个问题。

    【讨论】:

    • 我不是在谈论删除所有不会出现在巡演中的边缘。我说的是删除那些太远的。这已经消除了很多边缘,这对我来说已经足够了。
    • 您是说必须有一种简单的方法可以知道某些边缘是否“太远”。我的意思是,如果不做解决整个问题所需的相同工作,就无法知道这一点。
    • 这实际上不是真的。前处理的方法我以前见过,就是不懂。
    • 也许我错了,我对此很陌生。无论如何,我真正在寻找的是一种从完整图中删除边以减少使用的内存量的方法。效率是我最不关心的事情。它只需要通过删除边来减少完整图中的内存使用量。
    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 2013-06-09
    • 2017-06-03
    • 2011-09-08
    • 2015-04-28
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多