首页 > 其他分享 >AOV网络与拓扑排序

AOV网络与拓扑排序

时间:2024-04-06 12:12:12浏览次数:12  
标签:拓扑 入度 网络 AOV 顶点 排序

活动网络可以用来描述生产计划、施工过程、生产流程、程序流程等工程中各子工程的安排问题。活动网络可分为两种:AOV 网络和 AOE 网络。

1. AOV 网络与有向无环图 

一般一个工程可以分成若干个子工程,这些子工程称为活动。完成了这些活动,整个工程就完成了。实际上,可以用有向图来表示一个工程。在这种有向图中,用顶点表示活动,用有向边<u, v>表示活动 u 必须先于活动 v 进行。这种有向图叫做顶点表示活动的网络,记作 AOV 网络。 

在 AOV 网络中,如果存在有向边<u, v>,则活动 u 必须在活动 v 之前进行,并称 u 是 v 的直接前驱, v 是 u 的直接后继。如果存在有向路径<u, u1, u2, …, un, v>,则称 u 是 v 的前驱, v 是 u 的后继。 

AOV 网络中不能出现有向回路(或称为有向环)。不含有向回路的有向图称为有向无环图

在 AOV 网络中如果出现了有向回路,则意味着某项活动以自己作为先决条件,这是不对的。如果设计出这样的流程图,工程将无法进行。对于程序而言,将陷入死循环。因此,对于给定的AOV 网络,必须先判断它是否是有向无环图。 

2. 拓扑排序 

判断有向无环图的方法是对 AOV 网络构造它的拓扑有序序列,即将各个顶点排列成一个线性有序的序列, 使得 AOV 网络中所有存在的前驱和后继关系都能得到满足。 

构造 AOV 网络全部顶点的拓扑有序序列的运算称为拓扑排序。如果通过拓扑排序能将 AOV 网络的所有顶点都排入一个拓扑有序的序列中,则该 AOV 网络中必定不存在有向环;相反,如果得不到所有顶点的拓扑有序序列,则说明该 AOV 网络中存在有向环,此AOV 网络所代表的工程是不可行的。 

3. 拓扑排序实现方法

对一个 AOV 网络进行拓扑排序的方法为:

  • 从 AOV 网络中选择一个入度为 0(即没有直接前驱)的顶点并输出;
  • 从 AOV 网络中删除该顶点及该顶点发出的所有边;
  • 重复步骤(1)和(2),直至找不到入度为 0 的顶点。

按照上面的方法进行拓扑排序,其结果有两种情形:第一种,所有的顶点都输出来了,也就是整个拓扑排序完成了;第二种,仍有顶点没有输出,但剩下的图中再也没有入度为 0 的顶点,拓扑排序不能再继续进行下去了,这就说明此图是有环图。下图给出了一个拓扑排序的例子,最后得到的拓扑有序序列为: C5, C1, C4, C3, C2, C6。在该图中,有阴影的顶点表示当前输出的顶点。其拓扑排序过程为:

  • 选择一个入度为0的顶点, C5,如图(b)所示,删除C5及发出的每条边;
  • 选择一个入度为0的顶点, C1,如图(c)所示,删除C1及发出的每条边;
  • 选择一个入度为0的顶点, C4,如图(d)所示,删除C4, C4没有出边;
  • 选择一个入度为0的顶点, C3,如图(e)所示,删除C3及发出的每条边;
  • 选择一个入度为0的顶点, C2,如图(f)所示,删除C2及发出的每条边;
  • 选择一个入度为0的顶点, C6,如图(g)所示,删除C6, C6没有出边。

至此,拓扑排序执行完毕,所有顶点都排在一个线性有序的序列中。 

 

标签:拓扑,入度,网络,AOV,顶点,排序
From: https://www.cnblogs.com/love-9/p/18117301

相关文章

  • 结构体+排序——OpenJudge 1.10 07:合影效果
    描述小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?输入第一行是人数n(2<=n<=40,且至少有1......
  • 【故障诊断】基于冯洛伊曼拓扑的鲸鱼算法用于滚动轴承的故障诊断研究(Matlab代码实现)
    ......
  • 十大排序算法的C++实现
    2024年4月5日排序算法一、稳定性的定义排序算法的稳定性是指排序过程中,相同元素的相对位置是否会发生变化。稳定的排序算法在排序过程中不会改变元素彼此的位置的相对次序,而不稳定的排序算法经常会改变这个次序。稳定性是一个特别重要的评估标准,排序算法的稳定性是一......
  • Java实现排序算法(1)
    七大常见排序算法直接插入排序希尔排序选择排序堆排序冒泡排序快速排序归并排序下文后三种排序算法(后三种排序算法详解)直接插入排序算法描述:定义两个下标(i和j).i从第二个元素开始,j从i前面开始,进行循环,途中定义一个temp,每次循环将i下标的元素放到temp中,与......
  • 逐点插入法【二叉查找(排序)树的插入算法】
    问题描述:利用逐点插入法建立序列{50,72,43,85,75,20,35,45,65,30}对应的二叉树排序后,查找元素30要进行多少次元素间的比较?首先我来解释以下什么是二叉查找树:二叉查找树是一棵空树,或者是具有如下性质的二叉树:(1)若它的左子树非空,则左子树中所有结点的值均小于根节点的值(2)若它的右......
  • 蓝桥杯备考随手记: 常用的三种排序算法(冒泡排序、插入排序、选择排序)
    1.冒泡排序(BubbleSort)冒泡排序是一种简单直观的排序算法,在待排序序列中不断地交换相邻两个元素的位置,通过多次遍历,将最大(或最小)的元素逐渐向右(或左)移动到正确的位置,直到整个序列有序。冒泡排序的基本思想如下:从序列的第一个元素开始,比较相邻两个元素的大小。如果前一个元......
  • 冒泡排序及qsort实现
    冒泡排序的核心思想就是:两两相邻的元素进行比较。假设有一个数组,它是:8 32 710 9107 4现在我们要通过两两对比的方式将其升序排列。我们要先将第一个和第二个对比,如果第一个数较大的话就交换位置。也就是说我们首先要将8和3对比然后交换位置,现在我们的数组就变为了3......
  • DAG与拓扑排序
    现实生活中我们经常要做一连串事情,这些事情之间有顺序关系或依赖关系,做一件事情之前必须先做另一件事,如安排客人的座位、穿衣服的先后、课程学习的先后等。这些事情可以抽象为图论中的拓扑排序(TopologicalSorting)问题。例题:P4017最大食物链计数给出一个食物网,要求出这个食物......
  • 信息学奥赛一本通题目解析:1938:【07NOIP普及组】奖学金(排序)
    【题目描述】某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前55名学生发奖学金。期末,每个学生都有33门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学......
  • 用Java实现快速排序
    快速排序(QuickSort)是一种分治的排序算法。它的基本思想是:选择一个基准元素(本文选择第一个元素)。将数组中比基准小的元素放在基准的左边,比基准大的元素放在基准的右边。对基准左边和右边的子数组分别进行快速排序。快速排序的优点包括:高效性:平均时间复杂度为O(nlogn)。适......