图的应用(考研)

一、最小生成树

性质:

(1)不唯一(2)权值之和是唯一的(3)删去一条边会变成非连通图,增加一条边会产生回路(4)最小生成树的边数为顶点数减一

1、Prim算法

m个顶点,n条边

算法过程:每次选择距离当前集合的最短路径,直至所有的点加入

初始化:向空树加入图中的任意顶点

循环:选择图内距离当前图的最短路径,并加入

时间复杂度:O(n^2)   不依赖于边的数量,适用于边稠密图

图的应用(考研)_第1张图片

2、Kruskal算法

算法过程:选择距离最短且连通两个不同的联通分量上的边加入空树

时间复杂度:

        使用堆存放边:O(log_{2}m)

        使用并查集:O(mlog_{2}m)

适用于边稀疏图

图的应用(考研)_第2张图片

二、最短路径

1、Dijkstra算法(贪心)

负权边不适用

算法过程:

1、选择源点,集合S为最短路径集合,V为全部路径集合

2、选择源点距离|V-S|的最短路径,更新最短路径集合

图的应用(考研)_第3张图片

 2、Floyd算法(动态规划)

算法过程:

通过状态转移方程更新矩阵

A^{(k)}[i][j] = Min\left \{A^{(k-1)}[i][j], A^{(k-1)}[i][k] + A^{(k-1)}[k][j] \right \}

​​​​​​​图的应用(考研)_第4张图片

(1)初始:\begin{bmatrix} 0 & 6 & 13\\ 10 & 0 & 4\\ 5 & \infty & 0 \end{bmatrix}  

(2)以A为中间点,B-A-C=  11 

更新一次后:A^{(0)}=\begin{bmatrix} 0 & 6 & 13\\ 10 & 0 & 4\\ 5 & 11 & 0 \end{bmatrix}

……不断更新至A^{(2)} = \begin{bmatrix} 0 & 6 & 10\\ 9 & 0 & 4\\ 5 & 11 & 0 \end{bmatrix}

 三、拓扑排序(判断图是否有环)

(1)每个顶点出现且只出现一次

(2)若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径

1、关键路径(考题)

关键活动 :l(i) - e(i) = 0 

顶点表示事件,有向边表示活动

a.某事件发生后,从该顶点出发的活动才能开始

b.指向某事件的所有活动结束时,该事件才能发生

tips:

1、关键路径不唯一,只有加快所有关键路径上共同的关键活动才能缩短工期

2、不能任意缩短关键路径,可能会导致该路径变为非关键路径

图的应用(考研)_第5张图片​​​​​​​

(1)事件最早发生时间ve(k)

从vi到vk的最长路径长度,从前往后计算

ve(k) = Max{ve(j)+weight(vj,vk)}

计算步骤:

初始:ve(1) = 0//每道题都一样

比较:当前节点k所有被指向的节点j之间进行比较中的最大值——边的权值加上ve(j)

——ve(2) = ve(1) + 3 = 3 , ve(3) = ve(1) + 2 = 2

——ve(4) = max{ve(2) + 2 , ve(3) + 4} = 6

……

(2)时间最迟发生时间vl(k)

最迟必须发生时间

从后往前计算,逆拓扑排序

vl(k) = Min{vl(j) - Weight(vk,vj)}

计算步骤:

初始:vl(n) = 8

比较:当前节点k所有指向的节点j之间进行比较中的最小值——边的权值加上ve(j)

(3)活动最早开始时间e(k)

        e(i) = ve(k)

        等于第i条边的起点的ve(k)

(4)活动最迟开始时间l(i)

        l(i) = vl(j) - w(vk,vj)  

第i条边的终点的vl(j)减去边的权值 

你可能感兴趣的:(计算机考研408,算法)