2

我试图想出一个解决方案来找到使用 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 的算法特别感兴趣。

4

1 回答 1

1

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

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

(注意,这不被视为多项式时间算法。相反,它是一种多项式时间算法,因为写出权重 k 所需的位数为 O(log k)。)

于 2020-03-18T20:02:05.830 回答