拓扑排序、图的最小生成树

本文介绍了拓扑排序的概念,用于活动依赖关系的表示,并详细讲解了如何通过普利姆算法和克鲁斯卡尔算法构建图的最小生成树,展示了两种方法的区别和操作过程。
摘要由CSDN通过智能技术生成

拓扑排序

        拓扑排序就是用序列表示哪些活动先执行哪些活动后执行。用结点表示活动,用有向线表示活动开始的先后关系,这种有向图称为用顶点表示的活动网络,简称AOV网络。

 上图中:

        没有任何箭头指向0,说明0的执行不受任何限制,可以率先执行0;

        0的箭头指向1、2,说明1、2执行的前提是0已经执行完毕;

        1、2的箭头指向4,说明4执行的前提是1、2均执行完毕;

以此类推。

一个图的拓扑序列并不唯一。

        例如上图中执行完0之后再执行1或者执行2均可;执行完3之后,执行5、6均可;

        故上图中拓扑序列有:02143567、01243657、02143657、01243567。

图的最小生成树

        图的最小生成树就是将图的一部分线去掉,只保留部分线能将结点连接起来即可(不存在环路此时图已经变成了树),留下来的线都是权值比较小的(距离短),从而使得保留下来的线的权值加起来的值是最小的状况,此为最小生成树。

图和树的区别:

        图存在环路,树不存在环路,一个树如果有a个结点,那他的线最多有a-1条,如果大于a-1条则说明是图。

图的最小生成树-普利姆算法

        画出此图的最小生成树

        根据树中连线最大值始终比结点小1的规则。图中有6个结点他的最小生成树中有5条线。

        首先任选一个结点,此处选A,将A结点定为红点集,其他点称为蓝点集;红点集A连接其他结点的线如下图,从中选取权值最小的线进行红、蓝点集的连接,连接到的点转变为红点集,因此此时红点集为A、B如图:

        此时红点集为A、B;红点集A、B连接其他蓝点集的线如下图,从中选取权值最小的线,进行红、蓝点集的连接,连接到的蓝点集转化为红点集,因此此时红点集为A、B、E如图:

        此时红点集为A、B、E;红点集A、B、E连接其他蓝点集的线如下图,从中选取权值最小的线,进行红、蓝点集的连接,连接到的蓝点集转化为红点集,因此此时红点集为A、B、E、F如图:

        此时红点集为A、B、E、F;红点集A、B、E、F连接其他蓝点集的线如下图,从中选取权值最小的线,进行红、蓝点集的连接,连接到的蓝点集转化为红点集,因此此时红点集为A、B、E、F、D如图:

         此时红点集为A、B、E、F、D;红点集A、B、E、F、D连接其他蓝点集的线如下图,从中选取权值最小的线,进行红、蓝点集的连接,连接到的蓝点集转化为红点集,因此此时红点集为A、B、E、F、D、C如图:

         至此所有结点连接完成,一共5条线段,此为上图按普利姆算法形成的最小生成树。

图的最小生成树-克鲁斯卡尔算法

        画出此图的最小生成树

         根据树中连线最大值始终比结点小1的规则。图中有6个结点他的最小生成树中有5条线。

        克鲁斯卡尔算法相对普利姆算法来说相对简单,他是直接在图中依次挑选权值最小的、不能形成环路的线。

        首先在所有线中挑选一条权值最小的,图中权值最小的线为100,如图:

         其次在剩余的线中再次挑选权值最小的,图中权值最小的线为200,有两条,此2条不构成环路,皆可选,如下图:

 

        再在剩余的线中挑选权值最小的,图中权值最小的线为250,如图: 

 

         依旧是在剩余的线中挑选权值最小的,图中权值最小的线为300,但是权值为300的线有2条,如果挑选B、F之间的线会将A、B、F构成环路,所以不可选,只能选C、D之间的,如图: 

 

        至此所有结点连接完成,一共5条线段,此为上图按克鲁斯卡尔算法形成的最小生成树。

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值