标签: dijkstra

Dijkstra的算法和A-Star如何比较?

我在看马里奥人工智能大赛中的人一直在做什么,其中一些人利用A*(A-Star)路径算法构建了一些漂亮的马里奥机器人.

替代文字http://julian.togelius.com/mariocompetition2009/screen1.png
(马里奥·博特在行动视频)

我的问题是,A-Star与Dijkstra相比如何?看着它们,它们看起来很相似.

为什么有人会使用一个而不是另一个?特别是在游戏路径的背景下?

algorithm artificial-intelligence graph a-star dijkstra

147
推荐指数
8
解决办法
8万
查看次数

为什么Dijkstra的算法不能用于负权重边缘?

有人可以告诉我为什么Dijkstra的单源最短路径算法假设边缘必须是非负的.

我说的只是边缘而不是负重量周期.

algorithm dijkstra shortest-path

109
推荐指数
6
解决办法
12万
查看次数

使用Dijkstra算法的负权重

我试图理解为什么Dijkstra的算法不适用于负权重.阅读最短路径上的示例,我试图找出以下场景:

    2
A-------B
 \     /
3 \   / -2
   \ /
    C
Run Code Online (Sandbox Code Playgroud)

来自网站:

假设边缘全部从左向右指向,如果我们从A开始,Dijkstra算法将选择最小化d(A,A)+长度(边缘)的边(A,x),即(A,B).然后设置d(A,B)= 2并选择另一个边(y,C),使d(A,y)+ d(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}
      for each vertex v in Adj[u] do
         Relax(u, v)
}

Initialize-Single-Source(G, s) {
   for each vertex v ? V(G)
      d[v] ? ?
      ?[v] …
Run Code Online (Sandbox Code Playgroud)

algorithm dijkstra shortest-path graph-algorithm

106
推荐指数
5
解决办法
9万
查看次数

如果广度优先搜索(BFS)可以更快地做同样的事情,为什么要使用Dijkstra的算法?

两者都可用于从单一来源找到最短路径.BFS运行O(E+V),而Dijkstra运行O((V+E)*log(V)).

另外,我见过Dijkstra在路由协议中使用了很多.

因此,如果BFS可以更快地做同样的事情,为什么要使用Dijkstra的算法呢?

algorithm graph dijkstra breadth-first-search

99
推荐指数
5
解决办法
4万
查看次数

为什么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)
Run Code Online (Sandbox Code Playgroud)

但是我一直在阅读关于算法的一些阅读,我看到的很多版本都使用了reduce-key而不是insert.

为什么会这样,这两种方法之间有什么区别?

algorithm dijkstra priority-queue graph-algorithm data-structures

88
推荐指数
2
解决办法
2万
查看次数

Prim和Dijkstra算法的区别?

Dijkstra和Prim的算法之间的确切区别是什么?我知道Prim会给MST,但是Dijkstra生成的树也是MST.那究竟是什么区别?

algorithm graph dijkstra minimum-spanning-tree prims-algorithm

76
推荐指数
7
解决办法
8万
查看次数

了解Dijkstra算法的时间复杂度计算

根据我的理解,我使用下面给出的邻接表将Dijkstra算法的时间复杂度计算为big-O表示法.它没有像它应该的那样出来,这让我逐步理解它.

  1. 每个顶点可以连接到(V-1)个顶点,因此每个顶点的相邻边的数量是V-1.让我们说E代表连接到每个顶点的V-1边.
  2. 在最小堆中查找和更新每个相邻顶点的权重是O(log(V))+ O(1)或O(log(V)).
  3. 因此,从上面的步骤1和步骤2,更新顶点的所有相邻顶点的时间复杂度是E*(logV).或E*logV.
  4. 因此,所有V顶点的时间复杂度是V*(E*logV),即O(VElogV).

但是Dijkstra算法的时间复杂度是O(ElogV).为什么?

algorithm big-o graph dijkstra time-complexity

48
推荐指数
3
解决办法
7万
查看次数

MongoDB + Neo4J与OrientDB对比ArangoDB

我目前正处于MMO浏览器游戏的设计阶段,游戏将包括一些实时位置的瓦片地图(因此每个单元格的瓦片数据)和一般世界地图.我更喜欢使用MongoDB进行持久数据世界的游戏引擎.

我还将实现一个运输模拟(我将在下面详细解释),它基本上是一个Dijkstra模块,我已经决定使用图形数据库,希望它能让事情变得更容易,因为它很受欢迎.

我对MongoDB + Neo4J设置感到满意,但后来注意到了OrientDB,它看起来像MongoDB和Neo4J(两者都是最好的?),甚至还有MongoDB和Neo4J的VS页面.

重点是,我听到一些关于MongoDB丢失数据的恐怖故事(尽管不确定它仍然存在)并且我没有这样的奢侈品.而对于Neo4J,我不是每年12K€的"忠实启动"成本的忠实粉丝,尽管我可能没有数百万的顶点数据库.OrientDB似乎是一个可行的选择,因为可能还有一些使用一个数据库解决方案的机会.

在这种情况下,一个逻辑移动可能会跳转到OrientDB,但它有一个小社区,并且没有找到很多关于它的评论,MongoDB和Neo4J是广泛使用的流行工具,我担心如果OrientDB是冒险.

我的第一个问题是,如果您对这些数据库有任何经验/意见.

第二个问题是其图形数据库是一个航运仿真更好.使用数据库有望计算从任何顶点到任何顶点的最便宜路线并遍历它(经典Dijkstra).但也必须根据"国家B对国家A禁运的情况改变权重,因此任何来自A国的物品都不能通过B,在XYZ地区有洪水,因此无法进行陆路运输"等.此外,该数据库预计会缓存结果.我希望不超过1000个顶点,但边缘很多.

如果问题有点含糊,请提前致谢并提前道歉

PS:我在标题上添加了ArangoDB,但是没有太多机会去看看.


截至2016年4月18日的后期编辑:在评估了对我的问题和发展策略的反应之后,我决定使用ArangoDB,因为他们的路线图对我来说更有希望,因为他们显然没有尝试添加大量半炒的炒作功能.

dijkstra mongodb neo4j orientdb arangodb

45
推荐指数
3
解决办法
3万
查看次数

Dijkstra的负权重算法

我们可以使用具有负权重的Dijkstra算法吗?

停!在你想到"大笑之后,你可以无休止地在两点之间跳跃并获得一条无限廉价的道路"之前,我更多地考虑单向路径.

申请将是一个山区地形,上面有点.显然,从高到低不会消耗能量,事实上,它会产生能量(因此负路径重量)!但是,除非你是查克诺里斯,否则再回去就行不通.

我想增加所有点的权重,直到它们是非负的,但我不确定这是否会起作用.

dijkstra

35
推荐指数
1
解决办法
5万
查看次数

Bellman-Ford vs Dijkstra:在什么情况下Bellman-Ford更好?

经过大量的谷歌搜索后,我发现大多数消息来源称Dijkstra算法比Bellman-Ford算法"更有效".但在什么情况下Bellman-Ford算法比Dijkstra算法更好?

我知道"更好"是一个广泛的陈述,所以具体来说,我的意思是速度和空间,如果适用.当然,在某些情况下,贝尔曼 - 福特方法比Dijkstra方法更好.

algorithm dijkstra shortest-path bellman-ford

33
推荐指数
3
解决办法
8万
查看次数