Algorithm 实施Dijkstra’;s在无权图上的最短路径算法,使其在线性时间内运行,应使用哪种数据结构?

Algorithm 实施Dijkstra’;s在无权图上的最短路径算法,使其在线性时间内运行,应使用哪种数据结构?,algorithm,graph,stack,queue,dijkstra,Algorithm,Graph,Stack,Queue,Dijkstra,要在未加权的图上实现Dijkstra的最短路径算法,使其在线性时间内运行,使用的数据结构为: 排队 堆叠 堆 B-树 我找到了以下答案: 队列,因为我们可以通过使用宽度优先搜索(BFS)算法在未加权图中找到单源最短路径,该算法使用“队列”数据结构,时间为O(m+n)(即与顶点和边的数量成线性关系) 在线性时间内实现它需要一个最小堆,因为如果我们在这里删除最小堆中的一个节点,它将不需要任何时间进行调整,因为所有r都具有相同的权重,所以删除一个节点将需要O(1)。。因此,对于n-1节点,它将是O(n

要在未加权的图上实现Dijkstra的最短路径算法,使其在线性时间内运行,使用的数据结构为:

  • 排队
  • 堆叠
  • B-树
  • 我找到了以下答案:

  • 队列,因为我们可以通过使用宽度优先搜索(BFS)算法在未加权图中找到单源最短路径,该算法使用“队列”数据结构,时间为O(m+n)(即与顶点和边的数量成线性关系)

  • 在线性时间内实现它需要一个最小堆,因为如果我们在这里删除最小堆中的一个节点,它将不需要任何时间进行调整,因为所有r都具有相同的权重,所以删除一个节点将需要O(1)。。因此,对于n-1节点,它将是O(n)


  • 有人能解释一下哪一个是正确答案吗?

    请注意,如果图未加权,则不需要dijekstra,一个简单的BFS将在O(E+V)==>线性时间内完美工作
    算法的简单实现需要一个队列数据结构。

    您的第一个答案甚至与Dijkstra的算法无关。@RasulKerimov对于未加权图,Dijkstra的算法简化为BFS,因此(1)基本上是正确的。(2) 只是错了,我不明白。Dijkstra如何降低到BFS。两种不同的方法。@MattTimmermans,那么选项(A)正确,其余的都是错误的?@RasulKerimov发现的每个新节点都将设置其初始优先级>=所有以前发现的节点的优先级,并且永远不需要调整。因此,可以使用发现的节点队列按FIFO顺序处理节点,从而将其转换为BFS