【算法】BFS(最短路径问题、拓扑排序)

【算法】BFS(最短路径问题、拓扑排序)

🌈个人主页:秦jh_-ZEEKLOG博客
🔥 系列专栏:https://blog.ZEEKLOG.net/qinjh_/category_12862161.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12862161&sharerefer=PC&sharesource=qinjh_&sharefrom=from_link

 ​ 

目录

边权为1的最短路径问题

 多源BFS最短路问题

BFS解决拓扑排序

有向无环图(DAG图)

AOV网:顶点活动图

拓扑排序

 实现拓扑排序


前言

💬 hello! 各位铁子们大家好哇。

             今日更新了最短路径问题和拓扑排序的相关内容
🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

边权为1的最短路径问题

只要边权都是相同的,就可以看作是边权为1的最短路径问题。

上图中的数字就是权值,比如a和b之间的长度是3。最短路径问题就是从某个点到另外一个点的最短长度。最简单的最短路径问题,就是边权都为1的。 

这里是一道例题:. - 力扣(LeetCode)  题解在这:  . - 力扣(LeetCode)

 多源BFS最短路问题

单源最短路问题就是只有一个起点和一个终点。

多源最短路问题是可以有多个起点和一个终点。

多源bfs:用bfs解决边权为1的多源最短路问题。

如上图,解法:把所有的源点当成一个“超级源点”。问题就变成单一的单源最短路问题。

绿色是源点(起点)。

例题:. - 力扣(LeetCode)    题解:. - 力扣(LeetCode)

BFS解决拓扑排序

有向无环图(DAG图)

如上图,由顶点和有方向的边连接起来的图,就是有向图。 ”无环“是指不会形成回路。



如上图,4指向5,5指向6,6又指向4,形成了一个环,此时就是有环的。


对于顶点的概念:

入度: 有多少条边指向该顶点

出度:由该顶点出去有几条边。

如上图,绿色代表入度,红色代表出度。1的入度是0,因为没有边指向它。1的出度是2,因为有两条边指向外面。

AOV网:顶点活动图

在有向无环图中,用顶点来表示一个活动,用边来表示活动的先后顺序的结构。

如上方的青椒炒肉工程图就是一个AOV网。 

拓扑排序

拓扑排序简单来说,就是找到做事情的先后顺序,并且结果可能不能唯一的。

在这个工程图中,有些活动必须得在某些活动完成后才能执行。 

如何排序?

最开始只能选择准备厨具或者买菜,他们两个其实都是入度为0的点。因此,活动的执行顺序其实就是把入度为0的点拿出来,然后把该点连接的边都删除,让别的点的入度减少。

操作:

        1.找出图中入度为0的点,然后输出。

        2.删除与该点连接的边。

        3.重复1,2操作,直到图中没有点或者没有入度为0的点为止。

为什么要加上没有入度为0的点为循环结束条件呢?
因为我们并不知道图中是否有环。

所以拓扑排序有一个重要应用:判断有向图中是否有环。

 实现拓扑排序

借助队列,进行一次bfs即可。

1.初始化:把所有入度为0的点加入到队列中

2.当队列不为空时:

        1.拿出队头元素,加入到最终结果中;

        2.删除与该元素相连的边;

        3.判断:与删除边相连的点,是否入度变为0。如果入度为0,就加入到队列中。

例题:. - 力扣(LeetCode)   题解:. - 力扣(LeetCode)

Read more

PostgreSQL:简介与安装部署

PostgreSQL:简介与安装部署

🧑 博主简介:ZEEKLOG博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。 技术合作请加本人wx(注明来自ZEEKLOG):foreast_sea

By Ne0inhk
FastChat 架构拆解:打造类 ChatGPT 私有化部署解决方案的基石

FastChat 架构拆解:打造类 ChatGPT 私有化部署解决方案的基石

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、FastChat 介绍 1、大语言模型本地部署的需求 2、FastChat 是什么 3、FastChat 项目简介 二、FastChat 系统架构详解 1、controller 2、model_worker 3、openai_api_server 4、web UI 前端 一、FastChat 介绍 1、大语言模型本地部署的需求 为什么明明有 ChatGPT、Claude 这些在线服务可用,大家还要花大力气去做 大语言模型本地部署 呢?🤔 其实就像吃饭一样,有人喜欢外卖(云服务)

By Ne0inhk

Windows/Linux双平台保姆教程:用DDNS-GO v6.7.6实现免费内网穿透(替代花生壳)

从零构建你的专属动态域名服务:告别付费内网穿透,拥抱开源DDNS-GO 最近和几个独立开发者朋友聊天,大家普遍吐槽的一个点就是内网穿透服务。无论是为了远程调试家里的NAS,还是想临时给客户演示一个部署在本地开发机的Web应用,传统的方案要么像花生壳这类工具需要付费且流量受限,要么配置复杂得让人望而却步。更别提一些云服务商提供的穿透服务,按流量计费的模式对于高频测试来说,成本完全不可控。其实,如果你手头有一个公网IP(哪怕是动态变化的),或者你的IPv6环境是通畅的,完全没必要依赖第三方付费服务。今天,我们就来深入聊聊如何利用一个名为 DDNS-GO 的开源神器,亲手搭建一套稳定、免费且完全自控的动态域名解析系统,彻底摆脱对商业内网穿透工具的依赖。 DDNS-GO 的核心价值在于它的“桥梁”作用。它持续监测你本地网络的公网IP地址(包括IPv4和IPv6),一旦发现IP发生变化,就立刻调用云解析服务商(如阿里云、腾讯云DNSPod、Cloudflare等)的API,自动将你指定的域名更新解析到新的IP上。这样一来,无论你的网络环境如何变动,通过一个固定的域名,你总能从外网访问到家里的

By Ne0inhk