【问题标题】:What type of algorithm is used for path finding with multiple paths yet one origin?哪种算法用于具有多个路径但一个起点的路径查找?
【发布时间】:2018-11-13 12:01:35
【问题描述】:

我有一个包含一个起点和多个目的地的图表。我正在尝试找到一种方法来解决问题以找到要解决的正确算法类型。目标是让到达所有点的路径尽可能少,但路径必须始终遵循网格点(即直角)。

例如:

Origin:  (0, 0)
Point A: (3, 3)
Point B: (3, 0)
Point C: (1, 3)

从 Origin -> C -> A 的路径很棒,因为到达 A 点只需要 2 个额外的段,因为它能够共享从 Origin -> C 的路径。

我考虑过的一些事情:

  • 用尽所有路径选项到所有点,然后彻底尝试所有组合。这显然是蛮力和最慢的方法。不能很好地扩展。
  • 创建从 Origin 到 Point _ 的 1 矩阵,然后执行矩阵加法以找到 最高流量 点。然后重新执行某种类型的穷举搜索,优先选择那些遵循高流量段的路径。

我想做的是绘制从原点到达每个点的“顶级”方式,然后将每条路径与其他路径进行比较,以查看它们可以共享路径的位置。这感觉递归很棘手。

因此,我的问题不是寻找特定问题的答案,而是试图找出解决问题的方法,即尝试解决时要走哪条路(双关语)。

总体而言,希望根据(尚无特定顺序)对路径进行评分:

  • 共享段数与唯一段数
  • 圈数(首选直线)
  • 最短距离

【问题讨论】:

    标签: algorithm graph-theory


    【解决方案1】:

    这似乎与最小生成树不同,但与 Steiner 树相似,https://en.wikipedia.org/wiki/Steiner_tree_problem 特别是直线 Steiner 树。

    https://en.wikipedia.org/wiki/Rectilinear_Steiner_tree

    不幸的是,这是 NP 难的。

    【讨论】:

    • 是的,你是对的,它就是直线斯坦纳树。现在,我可以将我的网格分成更小的区域。例如,具有 40 个顶点的图可以分成 8 个区域,每个区域有 5 个顶点,使用从 (0,0) 处的原点开始的直线斯坦纳树可以到达。我想知道这是否会降低复杂性。
    【解决方案2】:

    由于您实际上可以从二维空间上的任何点到达所有点,因此您可以将其表示为带有 N 节点和 N * (N - 1) / 2 边的 complete graph - 从每个点到所有其他点。

    每条边的权重可以表示两个节点之间的距离,等于这些点之间的距离x加上y的距离,因为你只使用直角:

    W[a, b] = = |a.x - b.x| + |a.y - b.y|

    现在,您有一个由节点和边集表示的正态图,您可以应用任何所需的算法。

    目前还不清楚您究竟想要达到什么分数,但构建最小生成树听起来像是最佳路径问题的答案。
    比如可以使用Kruskal's algorithm来实现。

    【讨论】:

      猜你喜欢
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2019-05-27
      • 1970-01-01
      • 2020-04-06
      相关资源
      最近更新 更多