算法笔记 图论和优先级队列的笔记

图论

DFS       stack     O(h)     不具有最短性

BFS       queue    O(2^h)   最短路

迪杰斯特拉算法 Dijkstra算法

  • 初始化

    • 将起始节点 A 的距离设为 0
    • 将其他所有节点的距离设为无穷大。
    • 创建一个优先队列,并将起始节点 A 加入优先队列。
  • 处理队列

    • 从优先队列中取出距离最小的节点 u
    • 对于 u 的每个邻接节点 v,计算从 uv 的路径长度,如果该长度小于当前记录的 v 的最短路径,则更新 v 的最短路径并将 v 加入优先队列。

Floyd多元最短路  O(n^3)

for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)d[i][j]=min(d[i][j],d[i][k]+d[k][j]);

拓扑排序的算法步骤

建图邻接列表

  • 计算每个节点的入度

    • 对于每一个节点,计算它有多少条边指向它,并记录这些入度。
  • 找到所有入度为 0 的节点并将它们放入队列

    • 初始化一个队列,将所有入度为 0 的节点入队。
  • 处理队列中的节点

    • 从队列中取出一个节点,将它添加到拓扑排序结果中。
    • 对这个节点的每一个邻接节点,减少它们的入度(因为这个节点已经被移除)。
    • 如果某个邻接节点的入度变为 0,则将该节点入队。
  • 重复步骤 3,直到队列为空

    • 如果所有节点都被处理,则成功地得到了一个拓扑排序。
    • 如果还有节点未被处理且队列为空,说明图中存在环,无法进行拓扑排序。

二分图 

        当且仅当图中没有奇数环

优先级队列

lambda函数中 >是最小堆, <是最大堆

greater是最小堆,less是最大堆

  • 最大堆:默认情况下,priority_queue 是最大堆,因为它使用 < 比较函数。这意味着较大的元素具有较高的优先级。
  • 最小堆:通过使用 greater<> 比较函数,priority_queue 变成了最小堆。greater<> 确保较小的元素具有较高的优先级。
  • 自定义比较函数:使用 lambda 表达式或其他自定义比较函数,可以灵活地定义优先级规则。

auto tupleCmp =[](const auto& e1,const auto& e2){ auto&& [x1,y1,d1]=e1; auto&& [x2,y2,d2]=e2; return d1>d2; };这个是最大堆还是最小堆

堆顶是优先级最高(值最大)的元素。

  1. 捕获参数
    • const auto& e1const auto& e2:这两个参数是要比较的元素,类型自动推断。
  2. 结构化绑定
    • auto&& [x1, y1, d1] = e1;auto&& [x2, y2, d2] = e2;:使用结构化绑定来解包元素。这些元素应该是类似于 tuplepair 的结构,其中 d1d2 是我们要比较的第三个元素(假设它们是优先级或距离)。
  3. 返回比较结果
    • return d1 > d2;:比较 d1d2。如果 d1 大于 d2,则返回 true

priority_queue 中,如果比较函数返回 true,表示 e1 应该排在 e2 之前。默认情况下,priority_queue 是最大堆,即较大的元素优先。然而,在这个自定义比较函数中:

  • d1 > d2 时,e1 被认为优先级更高,排在 e2 前面。
  • 因此,较小的 d 会被认为优先级较低。

结论:

这个比较函数实际上创建了一个 最小堆,因为 priority_queue 会根据 d 的值按升序排列,即优先处理 d 值较小的元素。

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

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

相关文章

易保全网络赋强公证系统,“公证赋强+科技赋能”双重增信

网络赋强公证系统是一种创新的法律服务模式&#xff0c;旨在通过线上方式赋予债权文书强制执行效力。具体来说&#xff0c;该系统结合了互联网技术与公证业务&#xff0c;允许公证机构根据当事人的申请&#xff0c;利用互联网公证技术手段对互联网上的债权文书进行公证&#xf…

算法训练营day06--242.有效的字母异位词+349. 两个数组的交集+202. 快乐数+1. 两数之和

一、242.有效的字母异位词 题目链接&#xff1a;https://leetcode.cn/problems/valid-anagram/description/ 文章讲解&#xff1a;https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html 视频讲解&#xff1a;http…

知识图谱存在的挑战---基础知识库相关和开发工具相关

文章目录 基础知识库相关开发工具相关 基础知识库相关 基础知识库是构建知识图谱的主要数据来源&#xff0c;包括维基百科、Freebase、YAGO、及国内的Zhishi.me、CN-Dbpedia、X-lore等。但在构建大规模知识图谱时将涉及不同基础知识库数据&#xff0c;而且在不同基础知识库的融…

是否可以购买外链?

答案是可以&#xff0c;但要看你买什么外链&#xff0c;有价值的自然外链价格肯定也高&#xff0c;随便到某些平台发的外链&#xff0c;哪怕是相关的高权重平台&#xff0c;作用也有限&#xff0c;当然&#xff0c;你要大批量购买&#xff0c;说不定也能出一点效果&#xff0c;…

基于Java的诊所医院管理系统,springboot+html,MySQL数据库,用户+医生+管理员三种身份,完美运行,有一万一千字论文

演示视频 基本介绍 基于Java的诊所医院管理系统&#xff0c;springboothtml&#xff0c;MySQL数据库&#xff0c;用户医生管理员三种身份&#xff0c;完美运行&#xff0c;有一万一千字论文。 用户&#xff1a;个人信息管理、预约医生、查看病例、查看公告、充值、支付费用...…

【CT】LeetCode手撕—53. 最大子数组和

目录 题目1-思路2- 实现⭐53. 最大子数组和——题解思路 3- ACM 实现 题目 原题连接&#xff1a;53. 最大子数组和 1-思路 动规五部曲 1. 定义 dp 数组 dp[i] 含义为&#xff1a;下标为 i 的数组的最大子数组和 2. 递推公式 因为所求的是最大子数组的和&#xff0c;即当前 n…

快速掌握JUnit等测试框架的使用,进行Java单元测试

1. 单元测试简介 单元测试&#xff08;Unit Testing&#xff09;是一种软件测试方法&#xff0c;通过对软件中的最小可测试单元进行验证&#xff0c;确保它们按预期工作。单元测试通常用于测试一个类的单个方法&#xff0c;以确保其逻辑正确、边界情况处理妥当、异常处理合适。…

【HarmonyOS - UIAbility组件和UI的数据同步】

简述 基于HarmonyOS的应用模型&#xff0c;可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信&#xff1a;基于发布订阅模式来实现&#xff0c;事件需要先订阅后发布&#xff0c;订阅者收到消息后进行处理。使用globalThis进行数据同步…

unity 打包PC安装包中常见文件的功能

目录 前言 一、打包好的文件 二、常用文件 1.文件夹XXX_Data 2.文件夹MonoBleedingEdge 3.文件夹XXX_Data内部 三、文件的应用 1.如果你替换了一个图片 2.如果你新增了或减少了图片和资源 3.场景中有变动 4.resources代码加载的资源改了 5.如果你代码替换了 四、作…

Vue11-键盘事件

一、键盘事件&#xff1a;keydown和keyup事件 keydown 和 keyup 是两种常用于处理键盘输入事件的JavaScript事件。当你在网页的输入框或其他可输入元素上按下或释放键盘上的某个键时&#xff0c;这些事件就会被触发。 1-1、keydown 事件 当用户按下键盘上的某个键时&#xff…

vue3第三十九节(TS中的高级类型,分类以及使用注意事项)

前言&#xff1a;为什么需要使用高级类型&#xff0c;正常的类型不能满足日常的业务需求&#xff0c;对于复杂的数据结构、函数签名、类型转换&#xff0c;我们需要使用高级类型来处理&#xff0c;常用的高级类型包含以下几种&#xff1a; 常用的类型定义&#xff1a; 基本类…

SQL入门大全

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库的标准编程语言。它具有数据操纵和数据定义等多种功能&#xff0c;为数据库管理系统提供了强大的交互性特点&#xff0c;能够极大地提高计算机应用系统的工作质量与…

【源码】html+JS实现:24小时折线进度图

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>24小时折线进度图</title> <st…

安全等保评测-什么是“等保“?

等级保护测评是经公安部认证的具有资质的测评机构&#xff0c;依据国家信息安全等级保护规范规定&#xff0c;受有关单位委托&#xff0c;按照有关管理规范和技术标准&#xff0c;对信息系统安全等级保护状况进行检测评估的活动。 等保测评全称为信息安全等级保护测评&#xf…

基于SpringBoot3+Vue3宠物小程序宠物医院小程序的设计与实现

大家好&#xff0c;我是程序员小孟。 最近开发了一个宠物的小程序&#xff0c;含有详细的文档、源码、项目非常的不错&#xff01; 一&#xff0c;系统的技术栈 二&#xff0c;项目的部署教程 前端部署包&#xff1a;npm i 启动程序&#xff1a;npm run dev 注意事项&…

qmt量化交易策略小白学习笔记第30期【qmt编程之获取行业概念数据--如何获取板块分类信息数据以及板块成分股数据】

qmt编程之获取行业概念数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取行业概念数…

【通信协议-RTCM】GPS-RTK可观测消息 ---- 对应RTCM十六进制 编码ID(3E9 3EA 3EB 3EC)

1. 消息头的内容&#xff0c;类型1001、1002、1003、1004:GPS RTK消息 DATA FIELDDF NUMBERDATA TYPENO. OF BITS Message Number(e.g.,“1001” 0011 1110 1001) - 消息编号 DF002 uint12 12 Reference Station ID - 参考值ID DF003 uint12 12 GPS Epoch Time (TOW) - 周内秒…

深度学习的点云分割

深度学习的点云分割 点云分割是计算机视觉中的一个重要任务&#xff0c;特别是在三维数据处理和分析中。点云数据是由大量三维点构成的集合&#xff0c;每个点包含空间坐标&#xff08;x, y, z&#xff09;&#xff0c;有时还包含其他信息如颜色和法向量。点云分割的目标是将点…

Hadoop 3.X HA集群部署

准备工作 1、确认各个服务器网络是否互通、时间是否同步 2、确认各个节点部署那些组件 ip地址host名部署组件192.168.190.130h202406131 NameNode ResourceManager QuorumPeerMain JournalNode DFSZKFailoverController JobHistoryServer 192.168.190.131h202406132 NameNod…

React中“WebSocket is closed before the connection is established“

在 React 中你需要将它添加到你useEffect的return useEffect(() > {const socket new WebSocket(address);return () > {if (socket.readyState 1) { // <-- This is importantsocket.close();}} }, []);然而&#xff0c;这不仅仅是最好的解决方案&#xff01;您需…