【精品数据结构】拓扑排序.PPTVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
§6.6 拓扑排序 目的 根据结点间的关系求得结点的一个线性排列。 在有关工程进度/次序规划之类问题中,有着大量应用。 一般的大型工程,都可以划分为多个工序/步骤/子工程,这些工序有的可独立进行,但大多数和其他工序关联,即某工序的进行,要等到其他一些工序的完成才能开始。这类问题都可归结到拓扑排序。 §6.6.1 拓扑序列与AOV网 对有向图G,若它的一个结点序列      LS:v1, v2,..., vn 满足这样的条件:vi, vj是G的边时,在LS中vi位于vj之前(即ij),否则在LS中vi与vj的前后次序任意,则称LS为图G的一个拓扑序列,求拓扑序列的操作称为拓扑排序(Topological Sorting)。 §6.6.1 拓扑序列与AOV网 拓扑排序主要用在一类称为AOV网(Activity on Vertex networks)的有向图中。 AOV网是给有向图的结点与边赋予一定的语义的图,具体地: 结点──代表活动。如工程中的工序/子任务、状态等 边 ──代表活动之间的进行次序。边i,j表示活动i先于j进行。 AOV网常用来表达流程图,如一个工程中各子任务间的流程图、产品生产加工流程图、程序流程图、信息(数据)流程图、活动安排流程图等 §6.6.1 拓扑序列与AOV网 学生的选课次序就是一个AOV网应用问题。例如, 假定某计算机专业的主要课程如表 6?2所示,则对应的AOV网如图 6?1所示。 §6.6.1 拓扑序列与AOV网 图 6?1可有多个拓扑序列,下面给出了它的两个不同的拓扑序列: 1 2 3 4 6 5 9 7 8 11 1 2 3 4 6 5 7 9 8 11 ? 如果采用串行修课方式,则可完全按拓扑序列进行,但往往是一段时间内需同时修多门课,这就需识别出哪些课可同时修,这是一个识别可并行成份的问题。例如,在图 6?1中,可并行的课程有(1,2,3)→(4,6,10) →(5) →(9,7) →(8,11)等几组。 §6.6.2 拓扑排序算法与实现 (一)基本方法 进行拓扑排序的基本方法是简单而直观的,其包含下列几个步骤: [1] 从有向图中找一个没有前趋的结点v,若v不存在,则表明不可进行拓扑排序(图中有环路),结束(不完全成功); [2] 将v输出; [3] 将v从图中删除,同时删除关联于v的所有的边 [4] 若图中全部结点均已输出,则结束(成功),否则转[1]继续进行。 §6.6.2 拓扑排序算法与实现 (一)基本方法 通过对此方法做适当扩充,就可在求拓扑序列的过程中标识出可并行活动(结点)。 具体做法是,初始时将所有无前趋结点标为一组可并行结点。然后,每次执行步骤[3]后,将新产生的无前趋结点标为新的一组可并行结点。为了将同组并行结点连续排列,在步骤[1]中应优先选取并行组号与上次选择结点的并行组号相同的结点(若有的话) §6.6.2 拓扑排序算法与实现 (二)数据结构的选取 邻接表的图结点的定义修改为: template class TElem struct TGrphNode { long nodeIdx; //结点编号 TElem nodeInfo; //结点信息 long inDegree; //结点的入度 TGrphEdge * firstOutEdge; //第一条出边的指针? }; §6.6.2 拓扑排序算法与实现 (二)数据结构的选取 而图边的定义仍为: template class TEdgeInfo struct TGrphEdge { long edgeEndIdx; //边终点编号 TEdgeInfo edgeInfo; //边信息 TGrphEdge *next; //链指针? }; §6.6.2 拓扑排序算法与实现 (二)算法实现 for (每个结点v) if (v入度为0) v进栈; while (栈不空) { 从栈中弹出一个元素送v; 输出v; 求出v的第1个直接可达邻接点w; while (w存在) { 将w的入度域减1; if (w的入度域为0) w进栈; 求出v的下个直接可达邻接点w; } //while } //while (二)算法实现 下面是具体的C++程序。 long TopoSort(TGrphNode *g, long n, long *resu) { //对图g求拓朴序列,存入sesu(结点编号),n为图结点数目。 //返回所求得的结点数。若返回值小于n,则表示未能完全拓扑排序。 long *s, top, k, i; TGrphEdge *p;

文档评论(0)

精品资料 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档