Dijkstra算法中选择最近节点有什么意义?
What is the point of choosing closest node in Dijkstra algorithm?
在我阅读的所有文章中,首先处理的邻居是"closest" 邻居。但最终需要访问所有节点以找出所有可能的路径。所以,问题是——我们为什么要这样做?我相信如果我们简单地以 BFS 方式遍历 Graph 并计算成本,也可以达到相同的结果。例如:
第一步 - 0,成本 table:
2 - 6 |
3 - 2 |
第二步- 2,费用table:
2 - 6 |
3 - 2 |
1 - 9 |
第三步- 3,费用table:
2 - 6 |
3 - 2 |
1 - 9 |
4 - 12 |
第四步- 1,费用table:
2 - 6 |
3 - 2 |
1 - 9 |
4 - 12 |
5 - 12 |
第五步- 4,费用table:
2 - 6 |
3 - 2 |
1 - 9 |
4 - 12 |
5 - 12 |
通过简单的 BFS 遍历找到了成本最低的方法。我错过了什么?
假设从A
到B
和B
到C
的路径都是成本1,从A
到[=的直达路线13=] 是成本 3。(在现实世界中,前两个是绕过一座山的高速公路,而第三个是穿过山口的小路。)
Dijkstra 将路由您 A -> B -> C
,总成本为 2,而 BFS 将路由您 A -> C
,总成本为 3。
因此您必须先处理最低成本才能获得正确答案。
在每一步,Dijkstra 算法都会扩展目前已知的成本最低的路径。因此,当你最终遇到目标状态时,你知道所有其他未完成的路径都有更大的成本。所以,你刚刚找到的那一条是最短路径。
在我阅读的所有文章中,首先处理的邻居是"closest" 邻居。但最终需要访问所有节点以找出所有可能的路径。所以,问题是——我们为什么要这样做?我相信如果我们简单地以 BFS 方式遍历 Graph 并计算成本,也可以达到相同的结果。例如:
第一步 - 0,成本 table: 2 - 6 | 3 - 2 |
第二步- 2,费用table: 2 - 6 | 3 - 2 | 1 - 9 |
第三步- 3,费用table: 2 - 6 | 3 - 2 | 1 - 9 | 4 - 12 |
第四步- 1,费用table: 2 - 6 | 3 - 2 | 1 - 9 | 4 - 12 | 5 - 12 |
第五步- 4,费用table: 2 - 6 | 3 - 2 | 1 - 9 | 4 - 12 | 5 - 12 |
通过简单的 BFS 遍历找到了成本最低的方法。我错过了什么?
假设从A
到B
和B
到C
的路径都是成本1,从A
到[=的直达路线13=] 是成本 3。(在现实世界中,前两个是绕过一座山的高速公路,而第三个是穿过山口的小路。)
Dijkstra 将路由您 A -> B -> C
,总成本为 2,而 BFS 将路由您 A -> C
,总成本为 3。
因此您必须先处理最低成本才能获得正确答案。
在每一步,Dijkstra 算法都会扩展目前已知的成本最低的路径。因此,当你最终遇到目标状态时,你知道所有其他未完成的路径都有更大的成本。所以,你刚刚找到的那一条是最短路径。