Questions tagged «dijkstra»

11
Dijkstra的算法和A-Star相比如何?
我一直在研究Mario AI竞赛中的成员正在做的事情,其中​​有些人利用A *(A星)路径算法构建了一些非常简洁的Mario机器人。 (Mario A * Bot在行动中的视频) 我的问题是,A-Star与Dijkstra相比如何?看着它们,它们看起来很相似。 为什么有人会使用另一个?尤其是在游戏中使用路径时?


8
使用Dijkstra算法的负权重
我试图理解为什么Dijkstra的算法不能在负权重下工作。阅读有关最短路径的示例,我试图找出以下情况: 2 A-------B \ / 3 \ / -2 \ / C 从网站: 假设所有边缘都是从左到右定向的,如果我们从A开始,Dijkstra的算法将选择使d(A,A)+ length(edge)最小的边缘(A,x),即(A,B)。然后设置d(A,B)= 2并选择另一个使d(A,y)+ d(y,C)最小的边(y,C); 唯一的选择是(A,C),它设置d(A,C)= 3。但是,它永远找不到从A到B的最短路径,即C,总长度为1。 我不明白为什么使用下面的Dijkstra实现时,d [B]不会更新为1(当算法到达顶点C时,它将在B上运行放松,看到d [B]等于2,因此更新其值为1)。 Dijkstra(G, w, s) { Initialize-Single-Source(G, s) S ← Ø Q ← V[G]//priority queue by d[v] while Q ≠ Ø do u ← Extract-Min(Q) S ← S U {u} …


3
为什么Dijkstra的算法使用减少键?
Dijkstra的算法教给我如下 while pqueue is not empty: distance, node = pqueue.delete_min() if node has been visited: continue else: mark node as visited if node == target: break for each neighbor of node: pqueue.insert(distance + distance_to_neighbor, neighbor) 但是我一直在阅读有关算法的文章,我看到很多版本都使用reduce-key而不是insert。 为什么会这样?两种方法有何区别?


10
在图中访问某些节点的最短路径
我有一个大约100个节点和大约200个边的无向图。一个节点标记为“开始”,一个节点标记为“结束”,大约有十二个标记为“必须通过”。 我需要找到通过此图的最短路径,该路径以“开始”开始,以“结束”结束,并通过所有“必须通过”节点(以任何顺序)。 (http://3e.org/local/maize-graph.png / http://3e.org/local/maize-graph.dot.txt是有问题的图形-它表示宾夕法尼亚州兰开斯特的玉米迷宫)

5
了解Dijkstra算法的时间复杂度计算
据我了解,我使用下面给出的邻接表将Dijkstra算法的时间复杂度计算为big-O表示法。它没有按预期的方式出现,这使我逐步了解了它。 每个顶点可以连接到(V-1)个顶点,因此每个顶点的相邻边数为V-1。假设E表示连接到每个顶点的V-1边。 在最小堆中查找和更新每个相邻顶点的权重为O(log(V))+ O(1)或O(log(V))。 因此,从上面的步骤1和步骤2开始,更新顶点的所有相邻顶点的时间复杂度为E *(logV)。或E*logV。 因此,所有V个顶点的时间复杂度为V *(E * logV)即O(VElogV)。 但是Dijkstra算法的时间复杂度为O(ElogV)。为什么?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.