【问题标题】:Single source shortest path using BFS for a undirected weighted graph无向加权图使用 BFS 的单源最短路径
【发布时间】:2020-03-18 16:27:43
【问题描述】:

我试图想出一个解决方案,使用 BFS 为无向加权图找到单源最短路径算法。

我想出了一个解决方案,将每个边权重比如 x 转换为顶点之间的 x 边,每个新边的权重为 1,然后运行 ​​BFS。我会得到一棵新的 BFS 树,因为它是一棵树,所以从根节点到每个其他顶点只存在 1 条路径。

我遇到的问题是试图对以下算法进行分析。每条边需要被访问一次,然后根据其权重分割成相应数量的边。然后我们需要找到新图的 BFS。

访问每条边的成本是 O(m),其中 m 是边数,因为每条边都被访问一次以分割它。假设新图有 km 边(比如 m')。 BFS 的时间复杂度为 O (n + m') = O(n + km) = O(n + m) 即时间复杂度保持不变。 给定的证明正确吗?

我知道我可以在这里使用 Dijkstra 算法,但我对分析这种基于 BFS 的算法特别感兴趣。

【问题讨论】:

    标签: graph breadth-first-search undirected-graph weighted-graph


    【解决方案1】:

    您在此处包含的分析很接近但不正确。如果您假设每条边的成本最多为 k,那么您的新图将具有 O(kn) 个节点(每条边添加额外的节点)和 O(km) 个边,因此运行时间将为 O(kn + km) .但是,您不能在这里假设 k 是常数。毕竟,如果我增加边缘的权重,我确实会增加代码运行所需的时间。所以总的来说,你可以给出 O(kn + km) 的运行时间。

    请注意,此处的 k 是运行时的单独参数,与 m 和 n 相同。这是有道理的——更大的权重会给你更大的运行时间。

    (请注意,这不被视为多项式时间算法。而是pseudopolynomial-time algorithm,因为写出权重 k 所需的位数为 O(log k)。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      相关资源
      最近更新 更多