[笔记]Dijkstra算法正确性证明

news/2024/12/24 1:18:00/文章来源:https://www.cnblogs.com/Sinktank/p/18548565

最近做了一些题,感觉对算法更深刻的理解是比套板子更深层次的,在这个层次上解决问题,思路会更加清晰。比如P5687 [CSP-S2019 江西] 网格图(题解)这道题就是网格图的最小生成树,解法就建立在普通Kruskal的基础上,当时想了挺久也没想出来,看了题解才豁然开朗。所以各算法总是要回顾回顾的~

除了做题,没事想一想算法的工作原理,也会对算法有更深的理解。以后我会多写一些对一些算法的剖析和理解(可能并不是特别严谨,主要以可读性为主,以供随时回顾)。


Dijkstra的算法全过程

  • 初始定义\(S=\varnothing,T=V\)
  • 重复下列操作,直到\(T=\varnothing\)
    • \(T\)中找到到\(S\)距离最近的节点\(u\),此时\(u\)的最短路确定。
    • \(u\)\(T\)中取出,转入\(S\),并对\(u\)的邻接节点进行松弛操作。

Dijkstra正确性证明

对于节点\(u\),我们要证明它加入\(S\)时,我们确定下来的最短路是实际的最短路。

反证,假设在操作\(1\)结束后,有\(x\in T\),使得存在\(T\rightarrow\dots\rightarrow x\rightarrow u\),使得\(dis[x]+v<dis[u]\),由于边权\(v\)非负,所以一定有\(dis[x]<dis[u]\),那么\(x\)一定提前于\(u\)进入\(T\)并对\(u\)进行松弛了,与\(x\notin T\)矛盾。

同时这也解释了Dijkstra为什么不能处理负权边:如果存在负权边,我们就不能推出\(dis[x]<dis[u]\)

以前有段时间疑惑过为什么不能让所有边都加某个值来去除负权边,然而这样很显然是错误的:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业搭建帮助中心:提升服务效率与客户满意度的双重优势

在当今快节奏的商业环境中,企业面临着日益增长客户服务需求。搭建一个有效的帮助中心,不仅能够提升服务效率,还能增强客户满意度,这对于企业的长期发展至关重要。本文将探讨企业搭建帮助中心的优势,并提供实用的策略。 在构建企业帮助中心的过程中,HelpLook作为一个强大的…

软件管理,磁盘存储,文件系统以及网络协议

目录硬盘存储术语CHS 磁盘存储管理 LVM RAID硬盘阵列 软件包管理 搭建私有yum仓库 系统安装之后的常用初始化步骤 OSI七层模型 linux端口的简单介绍 TCP简单介绍 ip地址分类硬盘存储术语CHShead:磁头 磁头数=盘面数 track:磁道 磁道=柱面数 sector:扇区,512bytes cylinder:…

【Capture one 2023软件下载与安装教程】

1、安装包 「Capture One 23」: 链接:https://pan.quark.cn/s/9ff0306530d1 提取码:xXDC 「Capture one22」: 链接:https://pan.quark.cn/s/34b723a4d6e1 提取码:gpM3 「Capture One 21」: 链接:https://pan.quark.cn/s/d65ea77ba33a 提取码:8A5D 2、安装教程(建议关闭杀…

[题解]P5687 [CSP-S2019 江西] 网格图

P5687 [CSP-S2019 江西] 网格图 简单来说题目就是给定一个\(n\times m\)的网格图,同行边权相同,同列边权相同,求该网格图的最小生成树。 根据Kruskal算法的贪心思想,我们要优先选择权值尽可能小的行,并将这条边应用于尽可能多的列。列方向同理。 为了保证最终生成树的连通…

鸿蒙NEXT自定义组件:太极Loading

【引言】(完整代码在最后面) 本文将介绍如何在鸿蒙NEXT中创建一个自定义的“太极Loading”组件,为你的应用增添独特的视觉效果。 【环境准备】 电脑系统:windows 10 开发工具:DevEco Studio NEXT Beta1 Build Version: 5.0.3.806 工程版本:API 12 真机:mate60 pro 语言:…

09C++选择结构(3)——教学

1、求3个整数中最小值; 2、3个数排序; 3、随机函数rand(); 4、if语句的应用; 5、bug与debug一、求3个整数中最小值 题目:输入三个整数,表示梨的重量,输出最小的数。 方法1:经过三次两两比较,得出最小值。 a<=b && a<=c min=ab<=c && b<=a…

趋动云—pycharm连接教程

一、创建项目 二、上传代码 三、启动趋动云虚拟环境四、连接pycharm 1. 打开pycharm,创建项目(上传代码),或者直接打开项目代码 2. 配置在线虚拟环境 (1)点击设置Settings->Python Interpreter->Add Interpreter->On SSH (2)新建在线虚拟环境连接 输入信息:…

校园AI语音识别霸凌监控系统

校园AI语音识别霸凌监控系统通过音频识别技术,校园AI语音识别霸凌监控系统针对校园内监控难以覆盖的区域,如厕所、宿舍、天台等,进行全天候的音频监控。系统通过识别特定的关键词,如“救命”、“老师救我”等,来监测可能发生的霸凌事件。系统采用YOLOv5 AI音频算法,该算法…

校园AI防霸凌报警系统

校园AI防霸凌报警系统利用先进的AI音频分析技术,校园AI防霸凌报警系统能够在没有摄像头的隐私区域,如厕所和宿舍,实时监测异常声音。系统的核心是YOLOv5算法,它能够准确识别出求救声、谩骂声等异常声音,从而触发报警机制。智能防欺凌终端是系统的前线设备,安装在校园的隐…

校园宿舍学生防欺凌检测系统

校园宿舍学生防欺凌检测系统通过在宿舍、卫生间、楼梯角等校园内隐蔽位置安装AI智能语音报警终端。校园宿舍学生防欺凌检测系统通过这些终端麦克风捕捉周围的声音,并将其传输至AI算法模型进行分析。校园宿舍学生防欺凌检测系统能够实时处理语音流,当识别出特定的关键词或短语…

餐厅明厨亮灶实施方案 后厨明厨亮灶监控系统

餐厅明厨亮灶实施方案 后厨明厨亮灶监控系统通过监控摄像机采集后厨人员的监控据,利用AI技术进行数据解决与分析。餐厅明厨亮灶实施方案 后厨明厨亮灶监控系统自动检测识别后厨人员的违规行为,若没有戴厨师帽、口罩、工服等,然后进行抓拍做好记录。系统一旦发现违规行为,立…

校园卫生间学生防欺凌监测系统

校园卫生间学生防欺凌监测系统在宿舍、厕所等关键位置部署监测终端,校园卫生间学生防欺凌监测系统通过AI音频算法分析技术能够实时处理音频流,并识别出预设的求救特征词或异常声音,如“救命”、“住手”等,这些通常与暴力或紧急情况相关联。一旦监测到预设的求救特征词或异…