当前位置: 首页 > 面试题库 >

如果广度优先搜索(BFS)可以更快地执行相同的操作,为什么还要使用Dijkstra的算法?

谢阳成
2023-03-14
问题内容

两者都可用于查找来自单一来源的最短路径。BFS在运行O(E+V),而Dijkstra在O((V+E)*log(V))

另外,我看到Dijkstra在路由协议中的用法很像。

因此,如果BFS可以更快地完成相同的操作,为什么还要使用Dijkstra的算法呢?


问题答案:

Dijkstra允许为每个步骤分配除1以外的距离。例如,在路由中,距离(或权重)可以通过速度,成本,首选项等进行分配。然后,该算法为您提供了从源到遍历图中每个节点的最短路径。

同时,BFS基本上只在每次迭代时将搜索扩展一个“步”(链接,边沿,无论您想在应用程序中调用什么),这恰好是找到到达任何 步骤 所需的最小 步数
的效果。来自您的源(“根”)的给定节点。



 类似资料:
  • 我正在研究BFS算法,我有一个关于如何将相邻节点插入队列的问题。 例如,假设我们正在处理一个无向图,我们希望执行BFS来输出图的内容,那么我们如何知道在从队列中取出一个初始节点后,相邻节点以什么顺序插入到队列中呢?还有,有没有办法修改邻居节点插入队列的方式? 任何帮助都将不胜感激,谢谢。

  • 本文向大家介绍什么是广度优先搜索?相关面试题,主要包含被问及什么是广度优先搜索?时的应答技巧和注意事项,需要的朋友参考一下 类似树的按层遍历,其过程为:首先访问初始点Vi,并将其标记为已访问过,接着访问Vi的所有未被访问过可到达的邻接点Vi1、Vi2……Vit,并均标记为已访问过,然后再按照Vi1、Vi2……Vit的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依此类推,直到图

  • 主要内容:深度优先搜索(简称“深搜”或DFS),广度优先搜索,总结前边介绍了有关图的 4 种存储方式,本节介绍如何对存储的图中的顶点进行遍历。常用的遍历方式有两种: 深度优先搜索和 广度优先搜索。 深度优先搜索(简称“深搜”或DFS) 图 1 无向图 深度优先搜索的过程类似于树的先序遍历,首先从例子中体会深度优先搜索。例如图 1 是一个无向图,采用深度优先算法遍历这个图的过程为: 首先任意找一个未被遍历过的顶点,例如从 V1 开始,由于 V1 率先访问过了,所以

  • 我必须为一个算法开发伪代码,该算法计算给定顶点V和边E的图G=(V,E)中连通分量的数量。 我知道我可以使用深度优先搜索或广度优先搜索来计算连接组件的数量。 但是,我想用最高效的算法来解决这个问题,但是我不确定每个算法的复杂度。 下面是一个用伪代码形式写DFS的尝试。 下面尝试以伪代码形式编写 BFS。 我的讲师说BFS与DFS具有相同的复杂性。 然而,当我搜索深度优先搜索的复杂度时,它是O(V^

  • 我正在尝试使用Apache Spark Graphx实现BFS(广度优先搜索)算法。 这是我目前的实现: 当我尝试在线更新顶点属性时,我收到空指针异常: 我很困惑,因为for循环为空。 有人能解释我为什么吗?更新图形中顶点属性的最佳方法是什么?

  • BFS 全称是 Breadth First Search,中文名是宽度优先搜索,也叫广度优先搜索。是图上最基础、最重要的搜索算法之一。 所谓宽度优先。就是每次都尝试访问同一层的节点。 如果同一层都访问完了,再访问下一层。这样做的结果是,BFS 算法找到的路径是从起点开始的 最短 合法路径。换言之,这条路径所包含的边数最小。 在 BFS 结束时,每个节点都是通过从起点到该点的最短路径访问的。 (1)

  • 我曾尝试在循环加权图上使用Djikstra的算法,而不使用优先级队列(堆),结果成功了。 Wikipedia指出,该算法的原始实现不使用优先级队列,而是在O(V2)时间内运行。 现在,如果我们只删除优先级队列并使用普通队列,则运行时间是线性的,即O(ve)。 有人能解释一下为什么我们需要优先队列吗?

  • 问题内容: 我试图了解是什么使并发锁如此重要,如果可以使用的话。在下面的虚拟代码中,我可以执行以下任一操作: 同步了整个方法或同步了易受攻击的区域() 或使用ReentrantLock锁定易受攻击的代码区域。 码: 问题答案: 一个ReentrantLock的是非结构化的,不像结构-即你不需要使用块结构锁,甚至可以举行跨越方法的锁。一个例子: 这样的流程不可能通过构造中的单个监视器来表示。 除此之