【问题标题】:Finding inexpensive path that visits all nodes [closed]寻找访问所有节点的廉价路径[关闭]
【发布时间】:2013-07-18 15:01:22
【问题描述】:

我目前正在处理旧的编程奥林匹克问题,发现问题 5 相当困难。该问题基于某种类型的图论,涉及计算最便宜的路径并访问所有节点。完整的细节可以在这里找到:problem

是否适合使用 A* 搜索算法?你会用什么样的算法来解决问题,实现速度快,并且可以在给定的时间段内解决问题?

【问题讨论】:

  • A* 是启发式的,不能保证给出最短路径
  • @thomasfedb: ...不,这完全是本网站的主题(尽管我不反对关闭,因为这是一个非常糟糕的问题)。

标签: java a-star


【解决方案1】:

正如@kiheru 所说,A* 不起作用。

这是旅行商问题,它是一个 NP 完全问题。更换行驶距离的通行费,您会遇到同样的问题。 Traveling Salesman 链接有几个这样的算法。

Traveling Salesman

根据城市的数量,您会发现不同的算法,但是当您将城市添加到计算机不是精确解决方案的最佳选择时,它的计算成本会高得多。有许多不同的技术可以获得近似值,但这不是一个可解决的问题。

如果我要对其进行编码,我会使用名为 Linguistic Geometry 的东西(我在研究生院学到的东西)。基本上,您将节点视为一个游戏板,并且一次向您想要的答案迈出一步并对其进行评估。这不会解决它,但它会在很短的时间内为您提供一个很好的近似值。

【讨论】:

    【解决方案2】:

    这被称为travelling salesman problem,是NP-Complete。这意味着没有比暴力破解更快的方法来解决这个问题(嗯,实际上有一个O(2^n*n^2) 解决方案based on dynamic programming。由于您只处理 6 个节点,即 6 个! = 总共 720 条可能的检查路径,最简单的解决方案是尝试每种不同的城市排序并记录哪个最快。

    (另外,与上面@kiheru 的评论相反,A* 不是启发式算法。它使用启发式算法,但仍能找到最短路径问题的精确解决方案。但是,无论哪种方式,它都不适用于您的问题)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多