ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浙大数据结构 第八讲 图(下)

2021-12-10 23:35:18  阅读:174  来源: 互联网

标签:cnt dist 拓扑 MST 第八 浙大 条边 顶点 数据结构


数据结构 第八讲 图(下)

一、最小生成树问题

是一棵:无回路、|V|个顶点一定有|V|-1条边
生成树:包含全部顶点,|V|-1条边都在图里
边的权重和最小

在这里插入图片描述
最小生成树<---->图连通

贪心算法

什么是贪?每一步都要最好的
什么是好?权重最小的边
需要约束:只能用图里面存在的边;只能正好用掉|V|-1条边;不能有回路

Prim算法——让一棵小树长大

在这里插入图片描述

dist[V] = E<s,V>或正无穷
parent[s] = -1;
void Prim()
{
	MST = {s};
	while(1)
	{
		V = 未收录顶点中dist最小者;
		if(这样的V不存在) break;
		将V收录进MST:dist[V] = 0;
		for(V的每个邻接点W)
		{
			if(dist[W]!=0)
			{
				if(E<V,W> < dist[W])
				{
					dist[W] = E<V,W>;
					parent[W] = V;	
				}
			}
		}
	}
	if(MST中收的顶点不到|V|个)
		Error("生成树不存在");	
} 

时间复杂度 T = O(V)^2 适合稠密图

Kruskal算法——将森林合并成树

非常直接了当的贪心,每次在图里面找权重最小的边收进来
注意:不可形成回路!
在这里插入图片描述

void Kruskal(Graph G)
{
	MST = { };
	while(MST中不到|V|-1条边&& E中还有边)
	{
		从E中取一条权重最小的边E<V,W>;		//最小堆
		将E<V,W>从E中删除;
		if(E<V,W>不在MST中构成回路)			//并查集 
		将E<V,W>加入MST;
		else 
			彻底无视E<V,W>; 
	}
	if(MST中不到|V|-1条边)		//图是不连通的 
		Error("生成树不存在"); 
}

时间复杂度:T = O(V logV)

课后练习

在这里插入图片描述

题1的解释图
在这里插入图片描述

二、拓扑排序

在这里插入图片描述

拓扑序:如果图中从v到w有一条有向路径,则v一定排在w之前。满足此条件的顶点序列称为一个拓扑序
获得一个拓扑序的过程就是拓扑排序
AOV(网络)如果有合理的拓扑序,则必定是有向无环图(Directed Acyclic Graph,DAG)

初级算法(T = O(N^2))

void TopSort() T=O(N^2)
{
	for(cnt = 0;cnt < |V|;cnt++)
	{
		V = 未输入的入度为0的顶点;
		if(这样的V不存在)
		{
			Error("图中有回路");
			break; 
		}
		输出V,或者记录V的输出序号;
		for(V的每个邻接点W)
			Indegree[W]--;
	}
} 

算法优化(T = O(V+E))

随时将入度变为0的顶点放到一个容器里
此算法还可用于检测此图是否为有向无环图(DAG)

void TopSort()
{
	for(图中每个顶点V)
	{
		if(Indegree[V] == 0)
		{
			Enqueue(V,Q);
		}
		while(!Isempty(Q))
		{
			V = Dequeue(Q);
			输出V,或者记录V的输出序号;
			cnt++;
			for(V的每个邻接点W)
			{
				if(--Indegree[W] == 0)
					Enqueue(W,Q);	
			}
		}
		if(cnt!=|V|)
			Error("图中有回路!");
	}
}

在这里插入图片描述
在这里插入图片描述

三、拓扑排序应用:关键路径问题

AOE(Activity On Edge)网络:一般用于安排项目的工序在这里插入图片描述
在这里插入图片描述

课后练习

在这里插入图片描述

选A,由图可知,从0到3的时间是12,是由0-2-3决定的,而不是0-1-3。而4也是由0-2影响的,所以加快以后,能提前完工。

标签:cnt,dist,拓扑,MST,第八,浙大,条边,顶点,数据结构
来源: https://www.cnblogs.com/zjq182/p/15674216.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有