有趣的图(五)(59)

news2024/9/21 22:36:53

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

咱们今天继续学习图的应用,这些算法都是实际问题抽象出来的。

举个例子吧!

下面6个城市,不同城市之间的距离不同。

如图所示,请问如果从北京出发,到达海南,哪条路径最短?

这就需要了解下迪杰斯特拉算法(Dijkstra)了。

迪杰斯特拉算法

假设我们需要计算下图任意两点之间的最短距离。

假设从a点开始,我们假设a到其他点的距离是无穷大。

第一步更新:将a起始的边,如果距离比无穷大小,更新。

第二步更新:从a相邻的结点中,找到一个距离最近的点,也就是c点,做类似操作。

到达d点的距离1+2<4,更新4为3。

到达f点的距离1+8<10,更新10为9。

如此反复,直到所有点都被访问到。

这种算法就是迪杰斯特拉算法(Dijkstra)。

Python实现

代码实现(完整代码,见同名公众号,次条推文):

我们用一个字典来表示图,字典中可以嵌套字典哦:

我们定义一个函数来实现核心算法:

11行:G表示图,s表示起始结点

12~14行:该列表保存起始结点到本结点的距离,除了自身到自身是0外,其他都初始化为无穷大

16行:字典,路径,从起始结点到本结点的最小路径所经过的前继结点(上一个结点)

17行:集合,访问过的结点

18行:优先级队里,实现功能为,从当前结点出发的多条边中,选取最小的一个

21行:循环数为结点数减1,这里的_表示不关心循环变量

22行,从当前结点相邻的结点和边处理,一是看到相邻结点的距离是否需要更新,二是选取下一个结点

24行:如果新的路径d,比之前的路径D[u]小

25行:更新D[u],D[u]保存的是起始结点到本结点的最小距离

26行:添加结点u的前继结点为v,也就是->v->u

27行:将距离,结点放入优先级队列。从已更新的结点中(路径当前最小),以便选取下个结点为当前结点

28行:代码中有break,根据break退出当前循环

29行:此时v的权值和最小,最小路径,预选取它

30~32行:v没有被访问过,把它放入已访问队列

33~34行:如果有孤立结点,不和任意结点连接,会进入此分支,可先不关心这个逻辑

35行:返回D,P。D表示起始结点s到达本结点的最小距离,P表示s到达本结点的路径。

函数调用:

运行结果:

第一行字典中的键为结点(abcdef),值为a到本结点最小路径。

第二行字典中的键和值都是结点。1的前继结点是0,2的前继结点是0,如此类推。

你学会了吗?

这算法真让人拍案叫绝啊!

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。

他是一名天才程序员,为计算机的发展做出了巨大的贡献。

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第八章ThreadLocal

文章目录 先看面试题什么是ThreadLocal能干嘛基本使用常用方法 使用ThreadLocal来解决使用sychronized解决ThreadLocal与synchronized的区别 强化理解数据隔离的意义为什么线程执行完要remove 运用场景_事务案例场景构建 引入事务JDBC中关于事务的操作的api常规解决方案常规方案…

javascript程序员简历模板(合集)

javascript程序员简历模板一 个人资料 姓 名&#xff1a; 性 别&#xff1a; 女 年 龄&#xff1a; 21 民 族&#xff1a; 汉族 户籍&#xff1a; 湖北 襄樊 最高学历&#xff1a; 本 科 现所在地&#xff1a; 广东 广州 毕业院校&#xff1a; 南京理工大学 所学专业&#xff1…

忘记 localStorage 吧,indexedDB 才是前端存储新宠!

前言 在项目开发过程中&#xff0c;前端需要存储大量的数据。cookie, localstorage 都有存储长度限制。表格一览 特性cookielocalStoragesessionStorageindexedDB数据生命周期一般由服务器生成&#xff0c;可以设置过期时间&#xff1b;前端采用和js-cookie等组件也可以生成除…

带货、文案策划看过来-让GPT30秒内帮你写出世界顶级文案

开篇 在这个充满竞争的市场环境中,一句响亮的品牌短语,往往能让消费者对你的品牌印象深入脑海。俗话说:“言短意赅,反而显得深邃。”这不正是品牌短语的形式特点吗?而这种言简意赅、朗朗上口的品牌短语,在中国市场上就显得尤为重要。因为它直击心灵,与消费者之间一夕之…

Fiddler 八个实用技巧

大家对Fiddler应该不会陌生&#xff0c;但里面有些技巧不见得都会&#xff0c;这里就有八个实用技巧&#xff0c;通过对Fiddler的定制&#xff0c;能提高大家的测试效率。 1、双击Session时&#xff0c;使响应页始终显示到”json”tab页&#xff1b;使请求页始终显示到“webfo…

【LLM GPT】李宏毅大型语言模型课程

目录 1 概述1.1 发展历程1.2 预训练监督学习预训练的好处 1.3 增强式学习1.4 对训练数据的记忆1.5 更新参数1.6 AI内容检测1.7 保护隐私1.8 gpt和bert穷人怎么用gpt 2 生成式模型2.1 生成方式2.1.1 各个击破 Autoregressive2.1.2 一次到位 Non-autoregressive2.1.3 两者结合 2.…

js包管理yarn与npm,yarn安装,yarn 不是内部或外部命令

目录 yarn与npm 优势 用法区别 安装yarn 报错 yarn 不是内部或外部命令 运行代码&#xff08;yarn dev&#xff09; yarn与npm yarn由Facebook为解决npm的一些问题而创建的 优势 快速 本地缓存并行下载 - Yarn并行下载&#xff0c;还可以直接从硬盘缓存中读取包&…

python3 爬虫相关学习8:python 的常见报错内容汇总(持续收集ing)

目录 1 低级错误&#xff08;比如拼写错误等&#xff09; 1.1 NameError: 1.2 属性错误 AttributeError: 属性拼写错误 2 应用错误&#xff08;类型应用&#xff0c;属性使用的错误&#xff09; 2.1 类型错误 TypeError: 如字符串连接错误 2.2 属性应用错误 Attribu…

【枚举区间思想+DP】子串的子序列

F-子串的子序列_牛客小白月赛62 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 复盘一下应该有的思路&#xff1a; 首先n^2枚举肯定超时&#xff0c;我们枚举的是一个区间 枚举区间有一些trick&#xff1a; 1.枚举其中一个右&#xff08;左&#xff09;端点&#xff…

基于simulink车辆动力学可视化仿真(附源码)

一、前言 车辆动力学是研究汽车在行驶过程中的运动学和力学特性的学科。它研究车辆在不同路面条件、不同驾驶情况下的加速、制动、转向等运动状态&#xff0c;并通过建立数学模型来分析和优化车辆的性能和安全性。车辆动力学是汽车工程、机械工程和物理学等学科的交叉领域&…

【C语言11】文件操作(fgtec,fputc,fgets,fputs,fscanf,fprintf)

1.什么是文件 磁盘上的文件是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09;。 程序文件 包括源程序文件&#xff08;后缀为.c&#xff09;,目标文件&#xff08;windows环境后…

unittest教程__expectedFailure预期用例失败(5)

在断言用例执行结果时&#xff0c;会出现预期结果与实际结果不一致的情况&#xff0c;此时我们明确知道用例执行结果为FAIL&#xff0c;不想看到打印错误信息怎么办&#xff1f; 使用装饰器unittest.expectedFailure标记该用例。 import unittestclass Demo(unittest.TestCas…

Tcl常用命令备忘录-format与scan

format 语法&#xff1a;format formatString arg arg ... 参数介绍&#xff1a; formatString&#xff1a;格式化字符串&#xff0c;使用各种标识符和修饰符进行格式化。arg&#xff1a;被格式化的变量或字符串。 Tcl语言中的format命令可以用来格式化字符串输出&#xff…

Autosar代码解析-Source Insight的使用

文章目录 一、Source Insight简介二、Autosar代码查看三、解决办法一、Source Insight简介 Source insight是一款简洁、强大的轻量级代码浏览编辑器,启动快、使用便捷,很多程序员应该都使用过!它几乎支持所有的语言,比如C、C++、ASMA汇编、HTML等,能创建并维护其高性能的符…

【软件测试】性能测试服务端—排查指标问题(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件性能测试的目…

【数据类型】C#和Sql Server、Mysql、Oracle等常见数据库的数据类型对应关系

&#x1f3c6;&#x1f3c6;这是小5写的第二篇城市领跑者文章&#xff0c;一起为所在城市领跑助力吧&#xff01; &#x1f3c6;&#x1f3c6;在实际项目中&#xff0c;不管是用C#后端编程语言也好&#xff0c;还是Java后端编程语言&#xff0c;都可能会用到不同端的数据类型转…

JAVA-MAVEN初学者教程(配置、pom.xml、依赖管理等)

目录 认识MAVEN安装&配置MAVENwindows安装MAVENMAVEN的配置本地仓库 localRepository镜像 mirrors代理仓库 respositories代理 proxies IDEA配置MAVEN&#xff08;一个module&#xff09; MAVEN生命周期install下载包 模块的pom.xml坐标gav打包方式 package属性值 properti…

2023最全Java面试八股(涵盖所有Java核心面试知识点),立刻收藏

2022已成为过去式&#xff0c;不论这一年好与坏&#xff0c;我们都需要抓住新一年的机会&#xff0c;跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&#xff0c;给大家搞来了2…

9.反射和Lambda表达式

目录 一、反射 1.反射是什么 2.反射操作的四个核心类&#xff08;都处在java.lang.reflect&#xff09; 3.在java中获取一个类的class对象一共有三种途径&#xff1a; 4.想通过反射来操作类或者对象&#xff0c;第一步就是要获得该类的class对象。 5.Constructor应用 6.Met…

LabVIEW开发光线追踪可视化分段反射器测试台

LabVIEW开发光线追踪可视化分段反射器测试台 为了满足美国国家航空航天局&#xff08;NASA&#xff09;对未来望远镜的要求&#xff0c;新的红外空间天文台将在哈勃太空望远镜使用寿命结束后取代其。作为HST的继任者&#xff0c;詹姆斯韦伯太空望远镜&#xff08;JWST&#xf…