代码随想录算法训练营第六十三天| 最短路径总结篇、图论总结篇

[KamaCoder] 最短路问题总结篇

[KamaCoder] 最短路问题总结篇

自己看到题目的第一想法

    最短路径问题刚开始看的时候, 可能是 N 阳了, 高烧不停的在 38.2 到 39.2 之间波动, 烧的很厉害的时候会疯狂的出汗, 然后体温就下降了. 到现在三周了, 还是咳嗽喉咙有点疼, 但是已经恢复的不少了.

    最短路径里一开始就被概念给吓晕了, 有向图、无向图、连通图、强连通图、连通分量. 确实吓了我一大跳. 我感觉和我没有这部分的基础是有关系的.

看完代码随想录之后的想法

    到总结篇了, 我对最短路径大部分已经不再恐惧了, 似乎也总是可以靠自己写出最后的算法, 但确实总是有种摇摇欲坠之感.

    特别是 Kruskal 算法, 为什么每次选择最短的边, 只要不构成回路, 遍历完所有的边将没有形成环路的边都添加到最小生成树中, 就可以呢? Kruskal 算法比起 Prim 算法, 似乎没那么直观. Prim 算法非常的直观, 从点出发遍历所有的边, 从每个节点出发的边中, 每次只选最短的那一条, 选中这条边后就删除该边, 删除该边的方式为将该节点的 visited[index] 置为 true. 同时更新与该节点相连的边, 距离该节点的距离, 这样做的目的是为了将与该节点相连的边添加到带选路径中. 通过不断的将相连的边中最短的那条边添加进来, 最终完成最小生成树的添加. 这里我自己有个认知是, Prim 一定是要双向图, 如果是单向图的话, 会有问题吧?

    Kruskal 也是一样, 每个节点出发的边中, 只要把最短的选出来, 假设 A -》B -〉C -》A 这样的一个环形路中, 挑出最短的两条边, 是不是就减去了最长的边, 同时构成了最小生成树.  Kruskal 是如何减边的呢, 和 Prim 是一样的, 通过对边进行排序, 同一个节点出发的边, 每次只取最小边, 如果一条边添加进来产生了环路, 说明 A B C ... X 的 N 点中, 已经被权值更小的 N - 1 条边相连了, 这条产生环路的边是权值更大的, 需要被舍弃.

    Dijkstra 就是 Prim 的基础上, 需要计算节点距离出发点的距离, Dijkstra 堆优化版就是将 minDist 数组的结果再保存到按节点到出发点的距离排序的堆中, 辅助完成节点的筛选.

    Bellman_ford 会简单一些, N 个节点则松弛 n - 1 次, 就可以得到从出发节点到每个节点的最近距离.

    Bellman_ford 判断是否产生负权回路, 就是在第 n 次松弛的时候, 发现 minDist 发生改变, 就说明长生了负权回路.

    Bellman_ford 单源有限制节点路径寻址的话, 每次获取 minDist 值的时候, 不能用更新过的 minDist[index] 值, 需要从 minDistCopy[index] 里获取. 否则限制为 k 个节点的条件可能就不生效.

    SPFA (Shortest Path Fast Algorithm) 有点像 Prim, 每次把松弛过的边相连的节点添加到队列中, 下次对这些节点相连的边再松弛一次. 因为被松弛的边相连的节点可能发生了改变, 因此一旦发生改变就需要松弛所有相连的其他边.

    Floyd 算法一开始我很不理解, 好像突然来到了三维世界. 但是那个三维坐标图你不要露怯的话, 会发现其实只是用看似复杂的图说明了一个很简单的道理, 因为只初始化了 k = 0 时候的所有点的数据, 因此如果将 k 放在中间或者最里层, 就会造成 [i][j][k] 依赖了未计算过的 [i][k][k - 1]. dp[i][j][k] = Math.min(dp[i][j][k - 1], dp[i][k][k - 1] + dp[k][j][k - 1]). 如果 k 在最里层, 那么 [1][2][3] = Math.min(dp[1][2][2], dp[1][3][2] + dp[3][2][2]), 这时候 dp[1][3][2] 和 dp[3][2][2] 还没有计算出来, 导致最终结果出现异常.

    Astar 主要是启发函数, 因为所有节点都会被遍历到, 只是每次挑选哪个节点的不同, 因此还是比较简单的.

自己实现过程中遇到哪些困难

    就是那种迷迷糊糊的感觉吧. 好像一次写不出来, 看答案又懂了, 再过几天又忘了... 那种不能言说的痛.

[KamaCoder] 图论总结篇

[KamaCoder] 图论总结篇

自己看到题目的第一想法

    让我想一想, dfs 和 bfs 的区别?

看完代码随想录之后的想法

    深度搜索(dfs) 不需要借助队列来实现遍历, 靠的是递归. dfs 是遇到一个节点就直接访问它自己以及它四个方向上的节点, 因此会往一个方向一直走, 直到无路可走才换方向. 而广度搜索(bfs) 则是一圈一圈的向外访问, 因此很适合查找最近的节点.

    并查集用来将两个元素添加到一个集合中, 同时可以判断两个集合是否在同一个集合中. (但是对于要分类的话, 还是有几个分类就要创建几个数组吧?)

    拓扑排序就是先搜索入度为0的节点, 这些都是可以先处理的. 处理完之后就讲这些节点对应连接的节点的入度减一, 减一后如果入度为0, 则添加到带处理队列中, 在下一个循环处理. 如果处理完的节点和原始节点数量一致的话, 就完成了所有节点的处理. 否则存在环.

    最后感谢卡哥, 你是真的想把我们教懂... 但是比起你看了那么多的资料, 那么多的书, AC 过那么多的题目, 确实短短的时间内没办法掌握的太深. 还需要继续二刷三刷.

自己实现过程中遇到哪些困难 

     最短路径部分内容确实挺多的, 容易混在一起, 容易忘. 对于算法本身也有吃不透的情况. 这部分怎么说呢, 也许需要更多的应用, 更多的实操, 才能在思考中慢慢成长. 目前是一知半解的状态的.

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

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

相关文章

领航Linux UDP:构建高效网络新纪元

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言Udp和Tcp的异同相同点不同点总结 1.1、socket1.2、bind1.3、recvfrom1.4、sendto2.1、代码2.1、说明3.1、代码3.2、说明 引言 在前几篇博客中,我们学习了Linux网络编程中的一些概念。…

pandas+pywin32操作excel办公自动化

import pandas as pd import re import win32com.client as win32 from win32com.client import constants import os import os.path as osp #读取表格 pathos.getcwd() fposp.join(path,fuck_demo.xlsx) dfpd.read_excel(fp,header1,usecols[序号,光缆段落名(A端…

【数据结构(邓俊辉)学习笔记】高级搜索树02——B树

文章目录 1. 大数据1.1 640 KB1.2 越来越大的数据1.3 越来越小的内存1.4 一秒与一天1.5 分级I/O1.6 1B 1KB 2. 结构2.1 观察体验2.2 多路平衡2.3 还是I/O2.4 深度统一2.5 阶次含义2.6 紧凑表示2.7 BTNode2.8 BTree 3. 查找3.1 算法过程3.2 操作实例3.3 算法实现3.4 主次成本3.…

JAVASE——图书管理系统

JAVASE图书管理系统 主要业务有:管理员(增删改查),会员(借书还书查看记录) 管理员主要有:查看图书,增加图书,修改图书,会员管理,删除图书, 会员主要有&#x…

昇思25天学习打卡营第22天|GAN图像生成

今天是参加昇思25天学习打卡营的第22天,今天打卡的课程是“GAN图像生成”,这里做一个简单的分享。 1.简介 今天来学习“GAN图像生成”,这是一个基础的生成式模型。 生成式对抗网络(Generative Adversarial Networks,GAN)是一种…

Bug:时间字段显示有问题

Bug:时间字段显示有问题 文章目录 Bug:时间字段显示有问题1、问题2、解决方法一:添加注解3、解决方法二:消息转换器自定义对象映射器配置消息转换器 1、问题 ​ 在后端传输时间给前端的时候,发现前端的时间显示有问题…

代码trick 类型判断

文章目录 判断 null 和 undefined 判断 null 和 undefined vue 源码里的技巧,即 value null 用的是双等号。在双等号中,null 和 undefined 是相等的,也就是说 value 是 null 或 undefined 都会为 true if( value null ){// ... }

[Spring] Spring Web MVC案例实战

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

AV1技术学习:Translational Motion Compensation

编码块根据运动矢量在参考帧中找到相应的预测块,如下图所示,当前块的左上角的位置为(x0, y0),在参考帧中找到同样位置(x0, y0)的块,根据运动矢量移动到目标参考块(左上角位置为:(x1, y1))。 AV1…

前端a-tree遇到的问题

在使用a-tree时候,给虚拟滚动的高度,然后展开a-tree滑动一段距离 比如这样 随后你切换页面,在返回这个页面的时候 就会出现这样的bug 解决方法: onBeforeRouteLeave((to, from, next) > {// 可以在路由参数变化时执行的逻辑ke…

白山云荣获信通院“算网安全行业应用优秀案例”奖

日前,在由中国通信标准化协会算网融合产业及标准推进委员会与信通院共同组织召开的“2024年算网融合产业发展大会”上,白山云凭借创新的SD-WAN算网融合方案,荣获“算网安全行业应用优秀案例”奖。 算网融合是多元异构、海量泛在的算力设施&am…

path模块和HTTP协议

一。path模块常用API ./相对路径,/绝对路径 二,HTTP协议 1.请求报文 1.请求行 URL的组成 2.请求头 3.请求体 可以是空:GET请求 可以是字符串,还可以是json:POST请求 2.响应报文 1.响应行 HTTP / 1.1 200 OK H…

VsCode 与远程服务器 ssh免密登录

首先配置信息 加入下列信息 Host qb-zn HostName 8.1xxx.2xx.3xx User root ForwardAgent yes Port 22 IdentityFile ~/.ssh/id_rsa 找到自己的公钥,不带pub是私钥,打死都不能给别人。复制公钥 拿到公钥后,来到远程服务器 vim ~/.ss…

Leetcode—3011. 判断一个数组是否可以变为有序【中等】(__builtin_popcount()、ranges::is_sorted())

2024每日刷题&#xff08;144&#xff09; Leetcode—3011. 判断一个数组是否可以变为有序 O(n)复杂度实现代码 class Solution { public:bool canSortArray(vector<int>& nums) {// 二进制数位下1数目相同的元素就不进行组内排序// 只进行分组// 当前组的值若小于…

人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解1

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解。在深度学习领域,循环神经网络(RNN)因其处理序列数据的能力而备受关注。然而,传统的RNN存在梯度消失和梯度爆炸的问题,这使得它在长序列任务中的表现不尽…

MySQL--C_C++语言连接访问

Connector/C的使用 首先需要在mysql官网下载C接口库 解压指令 tar -zxvf 压缩包名 下载并解压好后 但是还有比这更优的做法。 这样子手动安装不仅麻烦&#xff0c;还可能存在兼容性的问题。 其实在我们使用yum安装mysql时&#xff0c;大概率会自动帮我们把其他的环境都安装…

[JS]认识feach

介绍 feach是浏览器内置的api, 用于发送网络请求 请求方式对比 AJAX: 基于XMLHttpRequest接收请求, 使用繁琐Axios: 基于Promise的请求客户端, 在浏览器和node中均可使用, 使用简单fetch: 浏览器内置的api, 基于Promise, 功能简单 基础语法 <body><button>发请求…

OracleLinux6.9升级UEK内核

方法一: [root@localhost ~]# uname -r 4.1.12-61.1.28.el6uek.x86_64 [root@localhost ~]# rpm -qa | grep kernel-uek kernel-uek-firmware-4.1.12-61.1.28.el6uek.noarch kernel-uek-4.1.12-61.1.28.el6uek.x86_64 [root@localhost ~]# yum list kernel-uek Loaded plug…

金豺狼优化算法(GWO)及其Python和MATLAB实现

金豺狼优化算法&#xff08;GWO&#xff09;是一种启发式优化算法&#xff0c;灵感来源于灰狼群体的社会行为和层级结构。GWO算法由Mirjalili等人于2014年提出&#xff0c;通过模拟灰狼群体的捕猎行为&#xff0c;寻找最优解。相比于其他优化算法&#xff0c;GWO算法具有较好的…

探索Gradle自动化测试:一站式测试框架配置指南

探索Gradle自动化测试&#xff1a;一站式测试框架配置指南 在当今快速迭代的软件开发周期中&#xff0c;自动化测试是确保代码质量和快速反馈的关键。Gradle&#xff0c;作为一个强大的构建工具&#xff0c;提供了丰富的插件和配置选项来支持自动化测试。本文将深入探讨如何在…