数据结构---排序(3)

本文介绍了拓扑排序的基本概念,包括出度和入度,并提供了拓扑排序的伪代码,包括两种不同的实现方式。拓扑排序在解决课程排序问题上十分有效,确保每门课都在其预修课程之后。此外,文章还讨论了拓扑排序在关键路径问题中的应用,特别是在AOV和AOE网络中寻找工程项目的最短完成路径。关键路径是项目管理中不可延误的活动序列,对于项目进度控制至关重要。
摘要由CSDN通过智能技术生成

拓扑排序

首先理解几个概念,出度和入度

  • 出度:在图中,从某结点出发的箭头的个数叫做某结点的出度
  • 入度:在图中,指向某结点的箭头的个数叫做某结点的入度

原理介绍

拓扑排序就是基于出度和入度的概念来完成的,每一次输出一个入度为0的结点。如下图的图,我们需要完成课表的排序。使每门课都在修完预修课程之后排出。
在这里插入图片描述
在这里插入图片描述

伪代码

//拓扑排序
#void Topsor()
{
	for (cnt = 0; cnt < | V | ; cnt++)//|V|图中的结点个数
	{
		输出(V = 未输入的入度为0的顶点);
		if (这样的V不存在)
		{
			Error("图中有回路");
			break;
		}
		输出V.或记录V的输出序号;
		for (V的每个邻接点W)
			Indegree[W]--;
	}
}

对于输出入度为零的结点v,如果采取的全部遍历的做法,那么整体复杂度就是O(n的平方)

聪明的做法

//拓扑排序
#void Topsor()
{
	for (图中的每个顶点)
	{
		if (Indegree[V] == 0)
			Enqueue(V, Q);
	}
	while (!IsEmpty(Q))
	{
		V = Dequeue(Q);
		输出V,或者记录V的输出编号; cnt++
			for (V的每个邻接点W)
				if (--Indegree == 0)
					Enqueue(W, Q);
	}
	if (cnt !=结点个数)
		Error("图中有回路")
}

拓扑排序应用–关键路径问题

  • AOV网络,每一个顶点表示一个事件,一个活动
  • AOE网络
    每条边表示一道工序,一般用于表示项目的工序,边表示工序,结点表示工序到此结束。以一个工程为利,每个工程都有多道工序,在AOE网络中把每个结点都分为三部分:持续时间,机动时间,顶点编号(工序编号)
    在这里插入图片描述
    在这里插入图片描述
    关键路径就是绝对不允许延误的活动组成的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光技术人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值