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

迪杰斯特拉算法的理解

图片转载自:最短路径算法-迪杰斯特拉(Dijkstra)算法 - 程序小哥爱读书的文章 - 知乎
https://zhuanlan.zhihu.com/p/346558578
迪杰斯特拉,一个广度优先算法,采用了贪心策略。
在这里插入图片描述

在这里插入图片描述
第一步,选取顶点D,更新和D相连的节点C,E

第二步,选取顶点C,因为和D直接相连的就只有C,D,他俩之中必然有一个是最短的,而且此时C到D的最短路径已经确定了,为什么?因为不可能存在另一个节点X能连接D和C了,所以C是确定了的,那么,我们再以C来更新别的,更新和C相连的,发现能更新B,F,E不能更新,从D到E的已经最短了。

第三步,选出E,为什么能确定E是最短的,因为现在E的最短路径,是从S集合里的每一个点更新而来的,不可能存在一个点在D和E之间,如果有,早就被加到S中去了,所以E一定是最短的。E可以加入S中,并且以E来更新新的节点,能更新F和G。这里我么发现,D->C->F这条路径会被pass,改成D->E->F,这说明,每次更新都是用已经确定了最短路径的元素来更新的,当前的F,其实已经被比了两次了!

我们发现,每次更新,都是以这个已经确定了最短路径的点来更新,更新完之后,再在U里挑一个最短的节点u加入S,为什么能确定此时u就是最短的,并且不会再更新呢?

  1. u 到起点的最短路径只能通过集合 S中的节点,因为在之前的步骤中,所有在 S 中的节点已经被处理过,它们的最短路径已经确定。
  2. 由于 u 是当前距离起点最近的未处理节点,意味着无论通过哪个已处理节点(属于 S),也不会有比当前路径更短的路径到达 u。因为都和F一样,被比过了。
  3. 如果有更短的路径到达 u,那么该路径一定经过一个还未处理的节点x(属于 U)。但是,这与选择 u 为当前最近的未处理节点相矛盾。因此,不可能存在这样一条更短的路径。(假如有x更短并且还在U中,我们就不会选u)
http://www.lryc.cn/news/461381.html

相关文章:

  • 华为OD机试 - 文本统计分析(Python/JS/C/C++ 2024 E卷 200分)
  • 计算机挑战赛9
  • C++学习路线(十六)
  • 2024年最受欢迎的AI工具与实际应用:AI技术对未来生活的深远影响
  • 【网络安全】账户安全随笔
  • 在线培训知识库管理系统:教育行业的新动力
  • 【AI声音克隆本地整合包及教程】第二代GPT-SoVITS V2:声音克隆的新境界
  • 博看书苑 8.8.1| 免费阅读海量图书期刊
  • 导致动态代理无法使用的原因有哪些?
  • 熟练使用Spring Boot、Spring Cloud Alibaba微服务开发框架,并深入理解其原理 学习要求
  • 2024-10-09 问AI: [AI面试题] 描述数据预处理在 AI 中的重要性
  • Linux中文件的理解
  • 益安宁丸,国药准字,值得信赖
  • Django项目的创建及说明(详细图解版)
  • MySQL 9从入门到性能优化-二进制日志
  • Cloudlog delete_oqrs_line 未授权SQL注入漏洞复现
  • 【Linux】解锁软硬链接奥秘,高效动静态库管理的实战技巧
  • 【设计模式】Python 后端开发中的工厂模式设计与实现
  • 划重点!入门安全测试,这几点要注意!
  • mysql 09 独立表空间结构
  • linux 虚拟环境下源码安装DeepSpeed
  • 常见八大排序算法
  • 汽车免拆诊断案例 | 2022款大众捷达VS5车行驶中挡位偶尔会锁在D3挡
  • Linux之HugePage的原理与使用
  • 一步步优化Redis实现分布式锁
  • C++进阶——二叉搜索树
  • Require:业界优秀的HTTP管理方案。
  • 装饰模式(Decorator Pattern)在 Go 语言中的应用
  • Windows系统部署redis自启动服务
  • 34岁IT男的职场十字路口:是失业预警,还是转型契机?