Algorithm BFS和Dijkstra有何不同;寻找最短路径时的s算法?

Algorithm BFS和Dijkstra有何不同;寻找最短路径时的s算法?,algorithm,graph,breadth-first-search,shortest-path,dijkstra,Algorithm,Graph,Breadth First Search,Shortest Path,Dijkstra,我在读关于图形算法的书时,遇到了这两种算法: Dijkstra算法和BFS算法在寻找节点间最短路径时有什么不同 我对此搜索了很多,但没有得到满意的答案 BFS在图中查找最短路径的规则如下: 我们发现所有连接的顶点 将它们添加到队列中,并 存储从源u到该顶点v的距离(重量/长度) 用从源u到顶点v的最短距离的路径更新,我们得到了它 这与我们在Dijkstra算法中所做的完全相同 因此为什么这些算法的时间复杂度如此不同? 如果有人能用伪代码来解释它,那么我会 非常感谢 我知道我错过了什么

我在读关于图形算法的书时,遇到了这两种算法:

Dijkstra算法和BFS算法在寻找节点间最短路径时有什么不同

我对此搜索了很多,但没有得到满意的答案


BFS在图中查找最短路径的规则如下:

  • 我们发现所有连接的顶点
  • 将它们添加到队列中,并
  • 存储从源u到该顶点v的距离(重量/长度)
  • 用从源u到顶点v的最短距离的路径更新,我们得到了它 这与我们在Dijkstra算法中所做的完全相同


    因此为什么这些算法的时间复杂度如此不同?

    如果有人能用伪代码来解释它,那么我会 非常感谢


    我知道我错过了什么!请帮忙

    宽度优先搜索只是Dijkstra的算法,所有边权重都等于1

    Dijkstra的算法在概念上是广度优先搜索,考虑了边缘成本

    在这两种情况下,探索图形的过程在结构上是相同的

    大宗报价 当使用BFS在图中查找最短路径时,我们所做的是 我们发现所有连接的顶点,将它们添加到队列中,并保持从源到该顶点的距离。现在,如果我们找到一条从源到那个顶点的距离更小的路径,我们就会更新它

    我们在BFS中不保持距离。它用于发现节点。 所以我们把它们放在一个普通的队列中,然后弹出它们。与Dijikstra不同,在Dijikstra中,我们将节点的累积权重(放松后)放入优先级队列中,并弹出最小距离

    所以BFS会像等权图中的dijikstra一样工作,因为

    由于使用简单队列和优先级队列,复杂性有所不同

    在加权边图中,可以得到正常队列的最短路径

    它是的变体,还可以处理负权重


    但另一方面,它的时间复杂度比Dijkstra的要差

    你看过维基百科吗?“宽度优先搜索可以看作是Dijkstra算法在无权图上的一个特例,其中优先级队列退化为FIFO队列。”是的!我在stackoverflow上也读了几乎所有与此相关的问题,但没有得到正确的答案!那么为什么时间复杂性之间存在差异呢?我的意思是,为什么他们说在非加权图中寻找最短路径时使用BFS而不是Dijkstra?@harrythomas Dijkstra使用优先级队列数据结构来跟踪未访问节点的边界。宽度优先搜索使用常规队列数据结构。优先级队列上的操作为O(日志n)。常规队列上的操作是O(1)。在BFS中使用规则队列是可能的,因为所有的边权重为1-这使得规则队列有效地表现为优先级队列。