【问题标题】:How to get path from one node to all other nodes in a weighted tree in minimum time?如何在最短的时间内获得从一个节点到加权树中所有其他节点的路径?
【发布时间】:2017-07-13 21:01:19
【问题描述】:

我只想获取源节点与每个节点的距离。但它与图问题不同,因为它是一棵树,每个节点之间的路径都是唯一的,所以我希望答案能在更有效的时间内完成。 是否有可能在有效的时间内得到答复?

【问题讨论】:

    标签: algorithm graph tree computer-science


    【解决方案1】:

    你说得对,在树中,找到两个节点之间的路径的难度比在一般图中要低很多,因为一旦你找到 any 路径(至少,一个没有周期)你知道它是最短的。因此,您所要做的就是找到从给定节点开始并到达其他节点的所有路径。您可以在时间 O(n) 内使用深度优先或广度优先搜索来执行此操作。要查找长度,只需记录您在旅行时沿着您走过的路径看到的边的长度。

    【讨论】:

      【解决方案2】:

      这与“图问题”没有不同:树是图的一种特殊情况。 Dijkstra's algorithm 是图遍历的标准。只需稍微修改一下:保留所有找到的路径长度,不要担心比较更新步骤,因为您将保留所有结果。继续,直到您用完要检查的节点,并且有您的路径长度。

      【讨论】:

      • 虽然您完全正确地认为树是图的特例,但设计用于处理一般图的算法可能比设计用于处理树的等效算法慢,因为它们必须观察以其他方式无法出现的情况。你可以在这里运行 Dijkstra 的算法,但是优先级队列是多余的,因为你永远找不到到给定节点的竞争路径。
      • 因此我提示修改算法。
      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 2017-11-14
      • 2015-02-10
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多