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

【茶话数据结构】查找最短路径——Dijkstra算法详解(保姆式详细图解,步步紧逼,保你学会)

 💯 博客内容:【茶话数据结构】查找最短路径——Dijkstra算法详解

😀 作  者:陈大大陈

🦉所属专栏:数据结构笔记

🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

目录

题记 

两大注意事项

实例题目

超超超详细图解

 答案以及详尽总结

后记

题记 

 复习到离散数学图论时,想起来这个算法,感觉很有写博客的必要!今天这篇博客就来讲一下查找最短路径的Dijkstra算法。

Dijkstra 算法,是由荷兰计算机科学家 Edsger Wybe Dijkstra 在1956年发现的算法,戴克斯特拉算法使用类似广度优先搜索的方法解决赋权图的单源最短路径问题。Dijkstra 算法原始版本仅适用于找到两个顶点之间的最短路径,后来更常见的变体固定了一个顶点作为源结点然后找到该顶点到图中所有其它结点的最短路径,产生一个最短路径树。本算法每次取出未访问结点中距离最小的,用该结点更新其他结点的距离。需要注意的是绝大多数的Dijkstra 算法不能有效处理带有负权边的图。

两大注意事项

需要注意两个问题

1.每次从未标记的节点中选择距离出发点最近的节点,标记它,收录到最短路径集合中。

2.计算刚加入的节点A的临近节点B的距离(不包含标记的节点),若(节点A的距离+节点B的距离到节点B的边长)<节点B,就更新节点B的距离和其前一个位置的点。

实例题目

 如图,计算从起点0到终点4的最短路径长度。 

超超超详细图解

 我们作出这样的表格,用于施展Dijkstra算法。

出发点表示从出发点到现在位置地距离。

首先从距离出发点最近的点,也就是出发点开始,它距离出发点的位置显然是0,。

标记它,并收录到最优路径集合中,我们用一个对钩来表示已被收录。

 下一步就是找它的临近节点,分别是1和7。

更新1和7的出发点距离和前面点,如图。

 紧接着从没有被标记的节点中选出出发点距离最短的,即为1,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为7和2,因为0已经被标记所以不算。

计算出0和它们的距离分别是15和12,12小于默认的正无穷,更新。

15比8大,不更新。

 选出出发点距离最小的点,即为7,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为6和8,因为1和0已经被标记所以不算。

计算出0和它们的距离分别是9和15,小于默认的正无穷,更新。

 选出出发点距离最小的点,即为6,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为5和8,因为7已经被标记所以不算。

计算出0和它们的距离分别是11和15,11的更新,15的和之前相等,不更新。

  选出出发点距离最小的点,即为5,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为2,3和4,因为6已经被标记所以不算。

计算出0和它们的距离分别是15和25和21。

15大于12,不更新,25小于正无穷,更新,21小于正无穷,更新。

 选出出发点距离最小的点,即为2,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,即为3和8,因为1和5已经被标记所以不算。

计算出0和它们的距离分别是19和14,分别小于25和15,都更新。

 选出出发点距离最小的点,即为8,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,全都标记过了,最方便的一集,小时候写哭了。

直接标记后跳过。

 选出出发点距离最小的点,即为8,标记它,并收录到最短路径集合中。

紧接着计算它的邻接节点,就剩下一个4没被标记了。

计算出距离它的距离是28,大于21,不更新。

最后一步将4标记,并收录到最短路径集合中。、

我们的最终答案堂堂出炉!!!

 答案以及详尽总结

从上面的表中可以得到答案,0到4的最短路径是21。

从头到尾经过的节点是 0 7 6 5 4。

其实需要注意的就这两点。 

1.每次从未标记的节点中选择距离出发点最近的节点,标记它,收录到最短路径集合中。

2.计算刚加入的节点A的临近节点B的距离(不包含标记的节点),若(节点A的距离+节点B的距离到节点B的边长)<节点B,就更新节点B的距离和其前一个位置的点。

后记

韩信带净化,成为大牛道阻且长,小僧还在山腰上。。。

博客里如果有问题的话,还请大佬私信我,我会修改的。

有问题的话请私信问我,我看到就会回的。 

相关文章:

【茶话数据结构】查找最短路径——Dijkstra算法详解(保姆式详细图解,步步紧逼,保你学会)

&#x1f4af; 博客内容&#xff1a;【茶话数据结构】查找最短路径——Dijkstra算法详解 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f989;所属专栏&#xff1a;数据结构笔记 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实…...

Webserver解决segmentation fault(core dump)段错问问题

前言 在完成了整个项目后&#xff0c;我用make命令编译了server&#xff0c;当我运行./server文件时&#xff0c;出现了段错误 在大量的代码中找出错因并不是一件容易的事&#xff0c;尤其是对新手程序员来说。而寻找bug的过程就像是侦探调查线索追查凶手一样&#xff0c;我们…...

存储过程基本了解

文章目录 介绍存储过程示例1. 目的2. 输入参数3. 输出参数4. 执行逻辑5. 返回值6. 示例用法7. 注意事项 存储过程的关键字有哪些简单实操 介绍 存储过程是一组预编译的SQL语句&#xff0c;以及流程控制语句&#xff0c;封装在数据库服务器中并可以被重复调用。它们可以接收参数…...

『大模型笔记』RAG应用的12种调优策略指南

RAG应用的12种调优策略指南 文章目录 一. 概要二. 数据索引2.1. 数据清洗2.2. 分块2.3. 嵌入模型2.4. 元数据(或未向量化的数据)2.5. 多索引2.6. 索引算法三. 推理阶段(检索和生成)3.1. 检索参数3.2. 高级检索策略3.3. 重新排序模型3.5. 大语言模型(LLM)...

leedcode刷题--day7(字符串)

23 文章讲解 力扣地址 C class Solution { public:void reverseString(vector<char>& s) {int left 0;int right s.size() - 1; // right 应该初始化为 s.size() - 1while (left < right) {swap(s[left], s[right]); // 直接交换 s[left] 和 s[right] 的值lef…...

【蓝桥杯省赛真题31】python连续正整数之和 中小学青少年组蓝桥杯比赛python编程省赛真题解析

目录 python连续正整数之和 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python连续正整数之和 第十二届蓝桥杯青少年组python比赛省赛真题 …...

【116个】网络安全测试相关面试真题

1、Burpsuite常用的功能是什么&#xff1f; 2、reverse_tcp和bind_tcp的区别&#xff1f; 3、拿到一个待检测的站或给你一个网站&#xff0c;你觉得应该先做什么&#xff1f; 4、你在渗透测试过程中是如何敏感信息收集的&#xff1f; 5、你平时去哪些网站进行学习、挖漏洞提…...

微服务day02-Ribbon负载均衡与Nacos安装与入门

一.Ribbon负载均衡 在上一节中&#xff0c;我们通过在RestTemplte实例中加上了注解 LoadBalanced,表示将来由RestTemplate发起的请求会被Ribbon拦截和处理&#xff0c;实现了访问服务时的负载均衡&#xff0c;那么他是如何实现的呢&#xff1f; 1.1 Ribbon负载均衡的原理 Rib…...

深度学习-神经网络原理

文章目录 神经网络原理1.单层神经网络1.1 回归单层神经网络&#xff1a;线性回归1.2 二分类单层神经网络&#xff1a;sigmoid与阶跃函数 1.3 多分类单层神经网络&#xff1a;softmax回归 神经网络原理 人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&…...

Chat GPT:智能对话的下一步

Chat GPT&#xff1a;智能对话的下一步 介绍 Chat GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer架构的强大对话模型&#xff0c;可以产生自然流畅的回答&#xff0c;并实现人机对话的感觉。本文将探讨Chat GPT在智能对话领域的影响和…...

[数据集][目标检测]鸡蛋破蛋数据集VOC+YOLO格式792张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;792 标注数量(xml文件个数)&#xff1a;792 标注数量(txt文件个数)&#xff1a;792 标注类别…...

RabbitMQ实战学习

RabbitMQ实战学习 文章目录 RabbitMQ实战学习RabbitMQ常用资料1、安装教程2、使用安装包3、常用命令4、验证访问5、代码示例 一、RabbitMQ基本概念1.1. MQ概述1.2 MQ 的优势和劣势1.3 MQ 的优势1. 应用解耦2. 异步提速3. 削峰填谷 1.4 MQ 的劣势1.5 RabbitMQ 基础架构1.6 JMS 二…...

插混、油混、增程式、轻混、强混,啥区别

这里写自定义目录标题 随着我国新能源汽车的大力推进&#xff0c;电车可以说是世界未来的主流&#xff0c;只不过现在是处在一个过渡时代 这是个好时代&#xff0c;因为我们见证并体验着历史过渡的细节 这是个不好的时代&#xff0c;因为我们可能只是未来新新人类的试验品 帮他…...

React 模态框的设计(八)优化补充

在之前的弹窗的设计中&#xff0c;有两处地方现在做一点小小的优化&#xff0c;就是把_Draggable.jsx中的 onPointerEnter 事件 用 useLayoutEffect来规换&#xff0c;效果更佳&#xff0c;同样的&#xff0c;在_ModelContainer.jsx中也是一样。如下所示&#xff1a; _Draggabl…...

知识积累(三):深度学习相关概念(查看检索时看到)

文章目录 1. 知识蒸馏2. 可微搜索索引&#xff08;DSI&#xff09;参考资料 在找论文时&#xff0c;发现的相关概念。 1. 知识蒸馏 知识蒸馏&#xff08;knowledge distillation&#xff09;是模型压缩的一种常用的方法&#xff0c;不同于模型压缩中的剪枝和量化&#xff0c;知…...

计算机专业必看的几部电影

目录 ​编辑 1. 《第九区》&#xff08;District 9&#xff0c;2009&#xff09; 2. 《谍影重重》&#xff08;The Bourne Identity&#xff0c;2002&#xff09; 3. 《源代码》&#xff08;Source Code&#xff0c;2011&#xff09; 4. 《她》&#xff08;Her&#xff0c;…...

工业人工智能需要注意的10件事

我们无法逃避人工智能这个风口&#xff0c;宣传人工智能软件的广告铺天盖地&#xff0c;似乎每个供应商都在推出最新的工具包&#xff0c;每天都有关于 ChatGPT、Bard 等新用例的文章。似乎全世界都在说&#xff1a;你现在需要人工智能&#xff01; 人工智能确实正在成为自动化…...

软考-系统集成项目管理中级-信息系统建设与设计

本章重点考点 1.信息系统的生命周期 信息系统建设的内容主要包括设备采购、系统集成、软件开发和运维服务等。信息系统的生命周期可以分为四个阶段:立项、开发、运维和消亡。 2.信息系统开发方法 信息系统常用的开发方法有结构化方法、原型法、面向对象方法等 1)结构化方法 …...

C++从零开始的打怪升级之路(day39)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于模板的知识点 1.非类型模板参数 模板参数分为…...

Java面试题之并发

并发 1.并发编程的优缺点?2.并发编程三要素?3.什么叫指令重排?4.如何避免指令重排?5.并发?并行?串行?6.线程和进程的概念和区别?7.什么是上下文切换?8.守护线程和用户线程的定义?9.什么是线程死锁?10.形成死锁的四个条件?11.怎么避免死锁?12.创建线程的四种方式?…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...