最小生成树
定义:在一个联通网的所有生成树中,各边的代价之和最小的那棵生成树称为该连通图的的最小生成树。
在构造最小生成树 的算法中,大多利用了最小生成树的一个简称MST的性质:假设N=(V,E)是一个联通网,U是顶点V的一个非空子集。若(u,v)是一条具有最小权值的边,其中u属于U,v属于V-U,则必存在一棵包含(u,v)的最小生成树
普里姆算法(Prim)
构造过程:
加点法
假设N=(V,E)时连通图,TE是N上最小生成树中边的集合。
1、U={uo}(uo∈V),TE={}.
2、在所有u∈U,v∈V-U的边(u,v)∈E中找一条权值最小的边(uo,vo)并入集合TE,同时vo并入U。
3、重复2,直至U=V为止。
此时TE中必有n-1条边,则T=(V,TE )为N的最小生成树
算法
待补充
注意:每次选择最小边时,可能存在多条同样权值的边可选,此时任意选其一即可
克鲁斯卡尔算法 Kruskal
构造过程:
假设联通网N=(V,E),将N中的权值按照从小到大的顺序排序。
1、初始状态为只有n个顶点而无边的非连通图T=(V,{}),图中每个顶点自成一个连通分量。
2、在E中选择权值较小的边,若该边所依附的顶点落在T中不同的连通分量上(即不形成回路),则将此边加入到T中,否则舍去此边而选择下一条权值最小的边。
3、重复2,知道T中的所有顶点都在同一连通分量上。
可以看出克鲁斯卡尔算法是逐步增加生成树的边,与普里姆算法相比,可称为“加边法”。
算法
\\有待补充
最短路径问题
在带权有向网中,习惯上称路径上的第一个顶点为源点,最后一个顶点为终点
从某个源点到其余各顶点的最短路径
---------迪杰斯特拉算法
基本思想
通过迪杰斯特拉算法计算图G中的最短路径时,需要指定起点s。
此外,需要引进两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离)。
初始时,S中只有起点s;U中是除s之外的顶点,并且U中顶点的路径是“起点s到该顶点的路径”。然后,从U中找到路径最短的顶点,并将其加入到S中;接着,更新U中的顶点和顶点对应的路径。然后,再从U中找到路径最短的顶点,并将其加入到S中;接着,更新U中的顶点和顶点对应的路径。……重复该操作,直到遍历完所有顶点。
操作步骤
初始时, S只包含起点s;
1、U包含除s之外的其他顶点,且U中顶点的距离为“起点s到该顶点的距离”【例如:U中顶点v的距离为(s, v)的长度,然后s和v不相邻,则v的距离为∞】。
2、从U中选出“距离最短的顶点k”,并将顶点k加入到S中;同时,从U中移除顶点k。
3、更新U中各个顶点到起点s的距离。之所以更新U中顶点的距离,是由于上一步中确定了k是求出最短路径的顶点,从而可以利用k来更新其他顶点的距离;例如,(s, v)的距离可能大于(s, k)+(k, v)的距离。
4、重复步骤2和3,直到遍历完所有顶点。
迪杰斯特拉算法的实现
算法:
有待补充:
2.每一对顶点之间的最短路径
弗洛伊德算法
利用邻接矩阵的方式
………………
拓扑排序
1、 AOV—网
用顶点表示活动,用弧表示活动间的优先关系的有向图称为顶点表示活动的网 简称 AOV—网。
2、拓扑排序的过程:
(1) 在有向图中选一个无前驱的顶点且输出它。
(2) 从图中删除该顶点和所有以它为尾的弧。
(3)重复(1)(2),直至不存在无前驱的顶点
若此时输出的顶点数小于有向图中的顶点数,则说明有向图中存在环,否则输出的顶点序列即为一个拓扑序列
3、拓扑序列的实现
………………
………………
关键路径
1、AOE—网
与AOV-网相对应的是AOE-网,即以边表示活动的网。AOE-网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续的时间。
在AOE-网中一条路径各弧上的权值之和称为该路径的带权路径长度
要估算整项工程完成的最短时间,就是要找到一条从源点到汇点的带权路径长度最长的路径,称为关键路径
如何确定关键路径,首先定义4个描述量
一、事件Vi的最早发生时间ve(i)
二、事件vi的最迟发生时间vl(i)
三、活动ai=<vj,vk>的最早开始时间e(i)
四、活动ai=<vj,vk>的最晚开始时间l(i)