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

拓扑排序

        拓扑排序就是用序列表示哪些活动先执行哪些活动后执行。用结点表示活动,用有向线表示活动开始的先后关系,这种有向图称为用顶点表示的活动网络,简称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
    评论
最小生成算法是论中的一个重要问题,它的应用非常广泛,包括网络设计、道路规划、电力系统设计等领域。在本文中,我们将介绍最小生成问题的基本概念、两种常用算法以及在实际应用中的具体应用。 一、最小生成问题的概念 最小生成问题是在一个加权无向连通中找到一个生成,使得上所有边的权重之和最小。一般来说,最小生成问题可以通过贪心算法来解决。 二、两种常用算法 1. Prim算法 Prim算法是一种贪心算法,它从任意一个点开始,每次选择与当前集合连通且权值最小的边,将该边连接的点加入到集合中,直到所有点都被连接。Prim算法的时间复杂度为 O(n^2) 或 O(nlogn),取决于采用哪种数据结构。 2. Kruskal算法 Kruskal算法也是一种贪心算法,它先将所有边按权值从小到大排序,然后依次加入生成中,直到加入 n-1 条边为止。如果加入的边会形成环,则将其舍弃。Kruskal算法的时间复杂度为 O(mlogm),其中 m 为边的数量。 三、最小生成问题的应用 1. 网络设计 在网络设计中,最小生成算法可以用于构建网络拓扑结构,以达到最小化网络成本的效果。例如,在企业内部建设网络时,可以使用最小生成算法来设计网络拓扑结构,以最小化网络设备和线缆的成本。 2. 道路规划 在道路规划中,最小生成算法可以用于确定最短路径。例如,在城市交通规划中,可以使用最小生成算法来规划城市交通路线,以最小化建设成本和缓解交通拥堵。 3. 电力系统设计 在电力系统设计中,最小生成算法可以用于优化电网的结构和拓扑。例如,在电力系统的无功补偿控制中,可以使用最小生成算法来确定最小的电容器安装位置,以最小化电网损耗和提高电网质量。 四、结论 最小生成算法是论中的一个重要问题,广泛应用于实际生活中的各个领域。Prim算法和Kruskal算法是最小生成算法中常用的两种算法,各有其优缺点。在具体应用时,应根据场景需求选择合适的算法,以达到最佳效果。最小生成算法的研究和应用,将会为现代社会的信息化建设和可持续发展做出更大的贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值