当前位置: 首页 > news >正文

Dijkstra算法(求最短路)

简介:

        迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。

特点:

        迪杰斯特拉算法采用的是一种贪心策略,其主要特点是从起始点开始,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。

时间复杂度:O(n*n)

使用场景:从一个顶点到其余各顶点的最短路径(权重不可为负)

Dijkstra算法思路

初始步骤:记录初始节点到其余各点的距离(初始为真无穷大),并在循环步骤中不断更新

核心循环步骤:

  1. 每次从未标记的节点中选择距离出发点最近的节点,标记,收录到最优路径集合中
  2. 计算刚加入节点A的临近节点B的距离(不含标记的节点),若(节点A的距离+节点A到节点B的边长)< 节点B的距离,就更新节点B的距离和前面点

代码模版:

例:计算节点A到所有节点的最短路径

步骤一:节点A计算到节点A的距离

因为是自己到自己所以距离为0,更新表格

然后在未标记的节点中寻找距离出发点最小的节点,为节点A并收录进最优路径节点中

步骤二:更新节点A临近的节点B、D、E的距离

由A到节点B、D、E的距离为10、30、100,因为比无穷大要小,所以更新表格中B、D和E的距离

然后在未标记的节点中寻找距离出发点最小的节点,为节点B并收录进最优路径节点中

步骤三:尝试更新节点B的临近节点C

节点B到节点C的距离为50,那么节点A到节点C就有一条经过节点B的路径,距离为60,小于无穷大,更新表格

然后在未标记的节点中寻找距离出发点最小的节点,为节点D并收录进最优路径节点中

步骤四:更新节点D的临近节点C和E的距离

节点D到节点C的距离为20,那么节点A经过节点D到节点C的路径距离为50,小于60,即距离小于原本经过B到C的路径距离,更新表格

节点D到节点E的距离为60。那么从A经过节点D到E的距离为90,小于100,更新表格。

然后在未标记的节点中寻找距离出发点最小的节点,为节点C并收录进最优路径节点中

步骤五:更新节点C的临近节点E

节点C到节点E的距离为10,那么从A经过节点D、C到达的节点E距离为60,小于90,更新表格

然后在未标记的节点中寻找距离出发点最小的节点,为节点E并收录进最优路径节点中

至此,所以节点皆被标记,因此所有节点的最短路径也在表格中写出

http://www.lryc.cn/news/294978.html

相关文章:

  • ipcf 核间通讯
  • 第七届西湖论剑·中国杭州网络安全技能大赛 AI 回声海螺 WP
  • SpringBoot 拦截器Intercepto的创建与基本使用
  • 爬虫工作量由小到大的思维转变---<第四十五章 Scrapyd 关于gerapy遇到问题>
  • 2024.2.4 awd总结
  • 仰暮计划|“用心感悟使我获取了艺术真谛,自律如始让我获得了人生成功,我将继续在艺术道路上走下去”
  • 网络原理——网络层
  • ideaIU-2023.2.1安装教程
  • JAVA面试题之三分布式和微服务的区别是什么?
  • electron实现软件(热)更新(附带示例源码)
  • 飞天使-k8s知识点12-kubernetes散装知识点1-架构有状态资源对象分类
  • mhz_c1f
  • Excel——高级筛选匹配条件提取数据
  • Python初学者学习记录——python基础综合案例:数据可视化——动态柱状图
  • 1.27马尔科夫链,抽样蒙特卡洛模拟(逆转化方法,接受拒绝矩阵),马尔科夫链蒙特卡洛MCMC,隐马尔科夫(HMM(V算法剪枝优化),NLP)
  • MC34063异常发热分析
  • 获取真实 IP 地址(一):判断是否使用 CDN(附链接)
  • 跨越财务困境,聚道云软件连接器如何助力企业轻松实现数字化转型?
  • Python接口自动化测试框架运行原理及流程
  • strtok的使用
  • 0206作业
  • 数据结构-栈
  • CentOS7搭建k8s-v1.28.6集群详情
  • Android实现底部导航栏方法(Navigation篇)
  • python 爬虫篇(1)---->re正则的详细讲解(附带演示代码)
  • (超详细)10-YOLOV5改进-替换CIou为Wise-IoU
  • Java-并发高频面试题-2
  • Windows安装Redis
  • Nicn的刷题日常之 有序序列判断
  • 1、将 ChatGPT 集成到数据科学工作流程中:提示和最佳实践