拓扑排序优质PPT.ppt
《拓扑排序优质PPT.ppt》由会员分享,可在线阅读,更多相关《拓扑排序优质PPT.ppt(46页珍藏版)》请在冰豆网上搜索。
是是G的边时,在的边时,在LS中中vi位于位于vj之前,否则之前,否则(不是边时)在不是边时)在LS中中vi与与vj的前的前后次序任意,后次序任意,则称则称LS为图为图G的一个拓扑序列,的一个拓扑序列,求拓扑序列的操作称为求拓扑序列的操作称为拓扑排序(拓扑排序(TopologicalSorting)。
)。
从从代代数数结结构构角角度度来来看看,拓拓扑扑排排序序是是由由某某集集合合上上的的一一个个偏偏序序关关系系得得到到一一个个全全序序关关系系的的操操作作。
若若将将集集合合中中结结点点作作为为图图结结点点,将将它它上上的的偏偏序序关关系系作作为为图图的的边边,则则任任一一偏偏序序关关系系均均可可表表示示为为一一个个有向图。
有向图。
显然,显然,某一图的拓扑序列可能不唯一。
某一图的拓扑序列可能不唯一。
拓拓扑扑排排序序主主要要用用在在一一类类称称为为AOV网网(ActivityonVertexnetworks)的的有有向向图图中中。
AOV网网是是给给有有向向图图的的结结点点与与边边赋赋予予一定的语义的图,具体地:
一定的语义的图,具体地:
结点结点代表活动。
如工程中的工序代表活动。
如工程中的工序/子任务、状态等子任务、状态等边边代代表表活活动动之之间间的的进进行行次次序序。
边边表表示示活活动动i先先于于j进进行。
行。
AOV网网常常用用来来表表达达流流程程图图,如如一一个个工工程程中中各各子子任任务务间间的的流流程程图图、产产品品生生产产加加工工流流程程图图、程程序序流流程程图图、信信息息(数数据据)流流程程图图、活动安排流程图等。
活动安排流程图等。
例例211学生的选课次序就是一个学生的选课次序就是一个AOV网应用问题。
网应用问题。
假定某计算机专业的主要课程如图假定某计算机专业的主要课程如图211(左左)所示,所示,则对应的则对应的AOV网如图网如图211(右右)所示。
所示。
图图211(右右)可有多个拓扑序列,下面给出了可有多个拓扑序列,下面给出了它的两个不同的拓扑序列:
它的两个不同的拓扑序列:
12346105978111234610579811如果图中两个结点之间均没有通路,那么称它如果图中两个结点之间均没有通路,那么称它们是可并行的。
在一个拓扑序列中,如果某子串们是可并行的。
在一个拓扑序列中,如果某子串(序列中某一段)中的各结点之间均是可并行的,(序列中某一段)中的各结点之间均是可并行的,则称该段为一个并行段(组)。
一个可并行组包含则称该段为一个并行段(组)。
一个可并行组包含了所有的可并行结点,则称该组为最大并行段(组)了所有的可并行结点,则称该组为最大并行段(组)。
找出最大并行组的工作称为并行识别。
1012396457811课程编号课程编号课程名称课程名称先行课先行课1高等数学高等数学-2离散数学离散数学-3高级语言高级语言-4数据结构数据结构3,25操作系统操作系统4,66计算机组成原理计算机组成原理27数据库原理数据库原理58编译原理编译原理4,79计算机网络计算机网络5,110人工智能原理人工智能原理1,2,311软件工程软件工程79图图211课程表(左)对应的课程表(左)对应的AOV网(右)网(右)并并行行组组具具有有重重要要的的实实际际意意义义。
位位于于同同一一组组的的各各结结点点代代表表的的活活动动可可以以同同时时进进行行,以以缩缩短短整整个个事事务务的的完完成成时时间间。
例例如如,对对选选课课问问题题,如如果果采采用用串串行行修修课课方方式式,则则可可完完全全按按拓拓扑扑序序列列进进行行,但但若若要要在在一一段段时时间间内内同同时时修修多多门门课课,这这就就需需识识别别出出哪哪些些课课可可同同时时修修,这这是是一一个个并并行行识识别别问问题题。
同同一一并并行行组组内内的的课课程程可可以以同同时时修修学学。
例例如如,在在图图211中中,可可并并行行的的课课程程组组有有(1,2,3)、(4,6,10)、(5)、(9,7)、(8,11)。
但但注注意意,这这些些组组之之间间还还是是有有序序的的(这这几几个个组组的的次序为它们的出现次序)。
次序为它们的出现次序)。
并并不不是是所所有有的的有有向向图图都都可可以以进进行行拓拓扑扑排排序序。
显显然然,若若图图中中每每个个结结点点都都有有前前驱驱,或或者者每每个个几几点点都都有有后后继继,则则该图是不可拓扑排序的。
该图是不可拓扑排序的。
21.1.221.1.2拓扑排序算法与实现拓扑排序算法与实现(一一)基本方法基本方法这里,我们给出一种拓扑排序算法。
该算法是简单而直这里,我们给出一种拓扑排序算法。
该算法是简单而直观的,实质上属于广度优先遍历,因此称为广度优先拓扑观的,实质上属于广度优先遍历,因此称为广度优先拓扑排序算法。
该算法包含下列几个步骤:
排序算法。
1从有向图中找一个没有前趋的结点从有向图中找一个没有前趋的结点v,若,若v不存在,不存在,则表明不可进行拓扑排序(图中有环路),结束(不完全则表明不可进行拓扑排序(图中有环路),结束(不完全成功);
成功);
2将将v输出;
输出;
3将将v从图中删除,同时删除关联于从图中删除,同时删除关联于v的所有的边的所有的边4若图中全部结点均已输出,则结束(成功),否则若图中全部结点均已输出,则结束(成功),否则转转1继续进行。
继续进行。
1012396457811109645781195781197811118逐次去掉没有前趋的结点逐次去掉没有前趋的结点的过程的过程图图21-20110111011011011100110010001101110110110111001100100课程表课程表AOE网的邻接矩网的邻接矩阵,它的列全为阵,它的列全为0的点,的点,就是无前趋的点,取出就是无前趋的点,取出该点该点删除该点对应的列和行,矩删除该点对应的列和行,矩阵的阶数减阵的阶数减1,再发现新的,再发现新的全为全为0的列,同样办法处理,的列,同样办法处理,直至所有结点输出直至所有结点输出地址起终权信息链a19bb110c24dd26ee210f34gg310h45ii48j57kk59l65m78nn711o9119b104d6e4g5ia1c2f3h4j55108n1111l6m78o910107k81191a02c03f04h25j26l17m1829o2103112增加一列,表示增加一列,表示各点的入度各点的入度先扫描入度为先扫描入度为0的结的结点,将其取出,然后点,将其取出,然后删除与其有链接的边。
删除与其有链接的边。
同时减少对应边终点同时减少对应边终点的入度。
例中删除的入度。
例中删除1、2、3点后结点点后结点4的入的入度减度减2为为0,结点,结点6的的入度减入度减1为为0,结点,结点9的入度减的入度减1,节电,节电10的入度减的入度减3。
结点。
结点4、6、10成为新的入度成为新的入度为为0的结点的结点1a02c03f04h05j26l07m1829o1100112此方法的正确性是显然的。
此方法的正确性是显然的。
通通过过对对此此方方法法做做适适当当扩扩充充,就就可可在在求求拓拓扑扑序序列列的的过过程程中中标标识识出出可可并并行行活活动动(结结点点)。
具具体体做做法法是是,初初始始时时将将所所有有无无前前趋趋结结点点标标为为一一组组可可并并行行结结点点。
然然后后,每每次次执执行行步步骤骤3后后,将将新新产产生生的的无无前前趋趋结结点点标标为为新新的的一一组组可可并并行行结结点点。
为为了了将将同同组组并并行行结结点点连连续续排排列列,在在步步骤骤1中中应应优优先先选选取取并并行行组组号号与与上上次次选选择择结结点点的的并并行行组组号相同的结点(若有的话)。
号相同的结点(若有的话)。
UU对对拓拓扑扑排排序序,还还有有一一种种算算法法,称称为为深深度度优优先先拓拓扑扑排排序序。
它它的的基基本本思思想想是是先先输输出出无无后后继继的的结结点点,即即对对每每个个结结点点v,检检查查先先一一次次递递归归地地求求出出v的的每每个个后后继继的的拓拓扑扑序序列列(各各序序列列连连接接在在一一起起),然然后后将将v插插入入到到该该拓拓扑扑序序列列的的最最前前面面。
关关于于具具体体的的程程序序实实现现,留留作作练习练习。
(二二)数据结构的选取数据结构的选取为了方便拓扑排序的实现,需对前面介绍过的图的存贮结为了方便拓扑排序的实现,需对前面介绍过的图的存贮结构做些扩充。
单纯从进行拓扑排序来讲,图采用邻接表较为构做些扩充。
单纯从进行拓扑排序来讲,图采用邻接表较为方便,所以这里只考虑邻接表的情况。
方便,所以这里只考虑邻接表的情况。
从前面给出的拓扑排序基本方法看,拓扑排序涉及的基从前面给出的拓扑排序基本方法看,拓扑排序涉及的基本操作有:
本操作有:
nn判别某结点是否有前趋;
判别某结点是否有前趋;
nn删除一个无前趋结点及其关联的边。
删除一个无前趋结点及其关联的边。
为此,我们为每个结点设一个入度域。
结点入度大于为此,我们为每个结点设一个入度域。
结点入度大于0时时表示有前趋,否则无前趋。
对于删除,其真正目的也不是删表示有前趋,否则无前趋。
对于删除,其真正目的也不是删除,而是为了通知出点:
对应的一个前驱已处理完。
因此,除,而是为了通知出点:
因此,删除某结点时,只需对该结点的各直接可达邻接点(出点)删除某结点时,只需对该结点的各直接可达邻接点(出点)的入度分别减的入度分别减1。
为了方便找到尚未输出的无前趋结点,将它们统一存放在为了方便找到尚未输出的无前趋结点,将它们统一存放在一个栈中。
每次执行入度减一个栈中。
每次执行入度减1(即删除一边)操作后,若有结(即删除一边)操作后,若有结点入度变为点入度变为0,则将它放入栈中。
每次选择无前趋结点时,也,则将它放入栈中。
每次选择无前趋结点时,也是从栈中提取。
是从栈中提取。
为为此此,邻邻接接表表的的图图结结点点的的定定义义中中需需设设置置入入度度域域,我我们们将前面给出的将前面给出的TGraphNodeAL定义修改为:
定义修改为:
templatestructTG