【问题标题】:Modified breadth-first search on a graph with edge weights of 2, 3 or 5在边权重为 2、3 或 5 的图上修改广度优先搜索
【发布时间】:2013-12-01 21:47:01
【问题描述】:

假设给定一个有向图 H = (V, E)。对于每条边 e,边的权重 w(e) 为 2、3 或 5。修改 BFS,使其计算从单个源顶点 s 开始的最短路径的长度。解释为什么您的算法是正确的并确定其最坏情况的运行时间(您可以假设 H 是通过邻接表表示的)。

你会怎么做呢?是什么让特定的重量边缘与众不同?

【问题讨论】:

  • 我已经意识到理想的路径将是任何直接边 (u,v),如果它是 2 或 3,如果它是 5,那么最短路径可能是具有两条边权重的路径2,因此,除非直接边是 2 或 3(并且根本存在),否则我们需要检查起始顶点的邻接列表中的其他路由。我假设我们只是正常应用 BFS,然后在找到所需的另一个顶点后通过跟踪来确定最短路径。但我确信可能有更好的方法来做到这一点,而无需在搜索之外添加额外的行..
  • 你熟悉 Dijkstra 算法吗?
  • 我至少知道这一点。是的。

标签: algorithm graph breadth-first-search


【解决方案1】:

您可以考虑边之间的假想节点。因此,如果在 2 个节点之间有一条长度为 2 的边。您制作一个中间节点并在它们之间添加长度为 1 的边。然后使用普通的广度优先搜索。 (您还需要对长度为 3 和 5 的节点执行此操作,添加 2 和 4 个节点)。由于您只添加 O(E) 个节点,因此复杂度相同。

【讨论】:

  • 哦,我明白了。因此,您只需制作假想节点,使每条边的长度相同,然后使用 BFS 的属性告诉您,一旦遇到您正在寻找的节点 - 那就是最短路径。然后,您可以对这些“假”节点拥有一些独特的属性,以便您可以轻松确定图中哪些实际顶点是路径的一部分。但是,我仍然很好奇是否还有其他方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多