2_Dijkstra’s Algorithm_宾夕法尼亚大学机器人运动规划专项课程【学习笔记(附 Dijkstra’s Algorithm 代码获取链接)】

1. 课程笔记

如上图所示,用节点代表村庄,用各边代表村庄之间的道路,用权重代表村庄之间的距离
注意:边权重非负
The goal is to find a path for the start node A to the end node E that minimizes the sum of the weights

首先用距离值0对起点进行标记,用红色表示节点已经被访问或处理;
然后,对节点A相邻的节点进行标记,这里是B、D、F节点,用蓝色表示当前正在讨论的、列表中的节点;
蓝色节点后面的数字表示起始点到该节点的最短路径长度

下次迭代,访问节点B,因为在所有蓝色节点中,B对应的距离最短

访问B的所有相邻点,发现点C路径长度为8,这是我们目前所知的去往节点C的最短路径。

下次迭代,访问节点D
当访问节点D的所有相邻节点时,发现有一条能到达节点C的更短的路径,即由D再到C,于是,将节点C的值更新为5

下次迭代,访问节点F
当访问节点F的所有相邻节点时,得到了一条抵达节点G的更短路径,于是,将节点G的值更新为9

下次迭代,访问节点C
当访问节点C的所有相邻节点时,我们发现,已经找到了一条抵达终点E的路径

在最后的迭代中,图表在E处构建结束

Dijkstra算法伪代码:

图中的节点有两个属性,一个是距离值,一个是父节点,用这些属性找到从终点开始回到起点的路;
每一次迭代,将选择列表中具有最小距离值的关联节点,并更新该节点的邻居(标记距离值和访问状态);
一旦抵达终点,就可以通过将现在的终点设置为起点来重建路径,从每个节点不断移动到其父级,直至抵达起始节点。

该算法的计算复杂度与节点数量和各边上权重有关(节点数与距离值)

该算法的低级版本实现起来不难,但是计算复杂度会随着节点数量增加而呈现二次式的增加
通过使用优先级队列的数据结构,可以更巧妙地实现节点列表排序,将计算复杂度降低,使他增速更慢。

2. 其它参考学习资源推荐

一篇详尽易懂的关于Dijkstra算法的文章:路径规划—详解Dijkstra算法
【注意:这篇文章讲解的第六次以及第七次迭代过程有错误,我已经在该博主评论区留言更正】

3. 算法复现效果

这是我完成的该课程对应的作业情况:
在该作业指定的地图中:
在这里插入图片描述
在我自定义的地图中:
在这里插入图片描述

4. 代码资源获取

点击获取对应的MATLAB代码资源

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值