【优选算法专栏】专题十八:BFS解决拓扑排序--前言

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:算法从入门到精通
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

专题十八

  • 1.有向环形图(DAG图)
    • 入度
    • 出度
  • 2.AOV网:顶点活动图
  • 3.拓扑排序
  • 4.如何实现拓扑排序

1.有向环形图(DAG图)

看下面这个例子:
在这里插入图片描述
上面这个例子就是一个DAG图

入度

有多少条边过来

出度

有多少条边出去

在上面例子中红色是每个点的出度,绿色是每个点的入度。

2.AOV网:顶点活动图

在有向图中,用顶点表示一个活动,用边来表示活动先后顺序的图结构。
在这里插入图片描述
例如青椒炒肉丝这道菜的制作就先要通过上面的顺序来进行。

通常AOV网都具有实际意义。

3.拓扑排序

在网上和市面上的书籍中拓扑排序的概念比较专业化,难以理解,我们举一个简单的例子来说一下什么是拓扑排序。

还是以青椒炒肉丝为例,根据流程图,我们可以简单的排一下序:模拟做菜
在这里插入图片描述

具体如下:
在这里插入图片描述
首先我们可以准备厨具也可以选择买菜两者谁先进行都可以。这里我们选择先准备厨具后买菜。接下来就只能洗菜,因为腌肉要先洗菜才能腌肉,然后切菜,炒菜,装盘,最后就是干饭。

通过上面例子,我们可以发现,通过找到事情的先后顺序,将这个按照先后顺序排个序其实就是一个拓扑排序。当然,我们还可以发现拓扑排序的结果是不唯一的。就比如先买菜还是先准备厨具,最后排完序是两个结果。

介绍了什么是拓扑排序,那么我们应该如何排序?其实刚在例子有实际意义可以很好理解,那要是放在一般情况,又该如何排序?

通过上面例子的排序,我们其实基本可以发现一下规律:

  1. 找出图中入度为0的点,然后输出。
  2. 删除与该点相连的边
  3. 重复1,2操作,知道图中没有点或者没有入度为0的点为止。
    为什么终止条件还有个没有入度为0的点呢?
    这是因为图有可能有环,当图里面有环的时候,就会没有入度为0的点。所以拓扑排序还有个重要的作用:判断有向图中是否有环。

4.如何实现拓扑排序

大体思路还是借助队列,依靠bfs解决此问题。

具体如下:

  1. 初始化:把所有入度为0的点加入到队列中
  2. 当队列不为空时:
    1. 拿出队头元素,加入到最终结果中
    2. 删除与该元素相连的边
    3. 判断:与删除边相连的点,是否入度为0,如果入度为0,加入到队列中

分析到这其实还有个问题,我们上面的实现的前提是图已经建立好的情况,但是我们应该先如何建图呢?我们通过一个例题和相关代码详细讲解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录Ubuntu 20.04中被困扰半年多之久的疑难的解决

一、我的ubuntu20.04症状描述: 在编辑文字文档的过程中,会不定时的出现鼠标指针随意跳动的情形,严重干扰了做文字编辑、编写代码等工作的进行。先后排除了戴尔笔记本及配件故障、鼠标故障、ubuntu系统中文档编辑软件的故障等可能。 二、原来…

CLI举例:上下行连接路由器(路由引流)

CLI举例:上下行连接路由器(路由引流) 介绍了集群设备,上下行连接路由器的配置举例。 组网需求 如图1所示,上行网络使用BGP,下行网络使用OSPF,多数据中心统一通过路由器R4接入Internet。 希望…

设计模式之迭代器模式(下)

3&#xff09;使用内部类实现迭代器 1.JDK中的迭代器示例 为了能够让迭代器可以访问到聚合对象中的数据&#xff0c;还可以将迭代器类设计为聚合类的内部类 package java.util;public abstract class AbstractList<E> extends AbstractCollection<E> implements…

SWM341系列应用(ADC应用)

SWM341系列 ADC应用 1、测试不同外接输入阻抗的情况 芯片供电3.3v&#xff0c;通过电阻箱进行分压获取被测电压&#xff0c;应用SimpleADC0 例程库。实测外接100K上拉电阻&#xff0c;或外接10K电阻上拉电阻&#xff0c;调整电阻箱获取被测电压3.0v、1.65v、100mV、50mV&#x…

如何解决Python包管理问题:ERROR: Could not find a version that satisfies the requirement

如何解决Python包管理问题&#xff1a;“ERROR: Could not find a version that satisfies the requirement” 文章目录 如何解决Python包管理问题&#xff1a;“ERROR: Could not find a version that satisfies the requirement”错误描述问题分析解决方案检查包名确保网络连…

前端三剑客 —— JavaScript (第二节)

目录 内容回顾 数据类型 基本数据类型&#xff1a; 引用数据类型&#xff1a; 常见运算 算术运算符 比较运算符 逻辑运算符 赋值运算符 自增/减运算符 三目运算符 位运算符 内容回顾 1.概述 2.基本数据 1.使用方式&#xff08;行内、页面、外部&#xff09; 2.对话框…

Facebook直播延迟过高是为什么?

在进行Facebook直播 时&#xff0c;高延迟可能会成为一个显著的问题&#xff0c;影响观众的观看体验和互动效果。以下是一些导致Facebook直播延迟过高的可能原因&#xff1a; 1、网络连接问题 网络连接不稳定或带宽不足可能是导致Facebook直播延迟的主要原因之一。如果您的网络…

华为机试题

目录 第一章、HJ1计算字符串最后一个单词的长度&#xff0c;单词以空格隔开。1.1&#xff09;描述1.2&#xff09;解题第二章、算法题HJ2 计算某字符出现次数1.1&#xff09;题目描述1.2&#xff09;解题思路与答案第三章、算法题HJ3 明明的随机数1.1&#xff09;题目描述1.2&a…

机器学习工程师 |面试作业题记录|本科水平 | 附个人解答

如是我闻&#xff1a; 面试的是一家在加拿大的初创公司&#xff0c;我想他们是需要清纯质朴的廉价劳动力干点杂活&#xff0c;非常符合我目前的情况。祝我成功吧。以下是他们的面试作业题&#xff08;take home questions&#xff09;&#xff0c;主要考察了一些基础知识&#…

Linux虚拟内存简介

Linux&#xff0c;像多数现代内核一样&#xff0c;采用了虚拟内存管理技术。该技术利用了大多数程序的一个典型特征&#xff0c;即访问局部性&#xff08;locality of reference&#xff09;&#xff0c;以求高效使用CPU和RAM&#xff08;物理内存&#xff09;资源。大多数程序…

查看 Linux 接入的 USB 设备速率是 USB2 还是 USB3

查看接入 usb 设备的速率 使用以下命令查看接入的 USB 设备速率&#xff08;每一行最后的 xxM 字样&#xff09;。插入设备前查看一次&#xff0c;插入设备后查看一次&#xff0c;对比即可定位到刚插入的设备是哪一条。 lsusb -t命令输出如下图 对照 USB 速率表 对照 USB 速…

【TensorRT】TensorRT C# API 项目更新 (1):支持动态Bath输入模型推理(下篇)

4. 接口应用 关于该项目的调用方式在上一篇文章中已经进行了详细介绍&#xff0c;具体使用可以参考《最新发布&#xff01;TensorRT C# API &#xff1a;基于C#与TensorRT部署深度学习模型》&#xff0c;下面结合Yolov8-cls模型详细介绍一下更新的接口使用方法。 4.1 创建并配…

构建智能生态:详解同城O2O外卖跑腿APP的开发技术

同城O2O外卖跑腿APP作为这一新型服务的代表&#xff0c;其开发技术成为了当下技术界的热点之一。小编将深入讲解同城O2O外卖跑腿APP的开发技术&#xff0c;以期为开发者提供一些有益的参考和指导。 需求分析与功能设计 在开发同城O2O外卖跑腿APP之前&#xff0c;首先需要进行充…

openlayer实现webgis端绘制制图及编辑

在WebGIS端制图是指通过Web浏览器界面实现地理信息数据的可视化、编辑、分析以及地图产品的制作。这一过程通常涉及以下几个关键环节&#xff1a; **1. 前端技术栈&#xff1a; •HTML/CSS/JavaScript&#xff1a;作为Web开发的基础&#xff0c;用于构建用户界面布局、样式设…

Go —— channel (二)

一个空的 channel 会产生哪些问题 读写nil管道均会阻塞触发死锁。关闭的管道仍然可以读取数据&#xff0c;向关闭的管道写数据会触发panic。 问&#xff1a;如果有多个协程同时读取一个channel&#xff0c;channel会如何选择消费者 channel 会按照维护的 recvq 等待读消息的…

vue canvas绘制信令图,动态显示标题、宽度、高度

需求: 1、 根据后端返回的数据&#xff0c;动态绘制出信令图 2、根据 dataStatus 返回值&#xff1a; 0 和 1&#xff0c; 判断 文字内容的颜色&#xff0c;0&#xff1a;#000&#xff0c;1&#xff1a;red 3.、根据 lineType 返回值&#xff1a; 0 和 1&#xff0c; 判断 箭…

栈的详解和例题(力扣有效括号)

感谢各位大佬的光临&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 收入专栏:初阶数据结构_LaNzikinh篮子的博客-CSDN博客 文章目录 前言一.什么是栈二.栈的实现三.例题&#xff…

推荐系统(唐宇迪)含具体代码

一、推荐系统介绍 用户冷启动 1.1 经典流程 1.2 涉及的技术点 二、协同过滤与矩阵分解 2.1 基于物品流行度&#xff08;排行榜榜单&#xff09;的推荐算法 class popularity_recommender_py():def __init__(self):self.train_data Noneself.user_id Noneself.item_id None…

Java每日一题(三道同一类型的题)

前言 本文一共有三道题:1.两数之和 2.三数之和 3. 四数之和 为什么把这三道题放一起呢&#xff0c;因为三数之和是可以根据两数之和进行推导&#xff0c;四数之和可以根据三数之和进行推导。 两数之和 思路分析: 我的思路: 1.排序 2.使用左右指针 3.处理细节问题 先让数组…

人工智能——深度学习

4. 深度学习 4.1. 概念 深度学习是一种机器学习的分支&#xff0c;旨在通过构建和训练多层神经网络模型来实现数据的高级特征表达和复杂模式识别。与传统机器学习算法相比&#xff0c;深度学习具有以下特点&#xff1a; 多层表示学习&#xff1a;深度学习使用深层神经网络&a…