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

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


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,加入到队列中

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

相关文章
|
3月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
231 5
|
3月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
270 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
4月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
241 1
|
3月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
183 0
|
3月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
131 0
|
4月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
128 0
|
3月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
197 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
3月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
260 3
|
3月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
150 1
|
3月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
115 0

热门文章

最新文章