算法【图的应用-最小生成树-最短路径-拓扑排序-关键路径】

图的应用-最小生成树

  • 最小生成树
    • 生成树的概念
      • 无向图的生成树
      • 最小代价生成树
      • 最小生成树的典型用途
      • 构造最小生成树算法
        • MST概念
        • 普里姆算法(Prim)
        • 克鲁斯卡尔算法(Kruskal)
        • 两种算法比较
        • 最短路径问题
          • 第一类:求两点间的最短路径
          • 第二类:某源点到其他各点的最短路径
          • 最短路径算法
            • 单源点最短路径:迪杰斯特拉算法(Dijistra)
            • 所有顶点间最短路径:弗洛伊德算法(Floyd)
            • 有向无环图应用
              • AOV网
                • 特点
                • 拓扑排序概念
                • 拓扑排序的方法
                • 拓扑排序的应用
                • AOE网
                  • 关键路径

                    最小生成树

                    生成树的概念

                    概念:所有顶点均由边链接在一起。但不存在回路的图

                    所有生成树具有以下共同特点:

                    生成树的顶点个数与图的顶点个数相同

                    生成树是图的极小连通子图,去掉一条边则非连通一个有n个顶点的连通图的生成树有 n-1 条边

                    在生成树中再加一条边必然形成回路

                    无向图的生成树

                    设图 G=(V E)是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G)分成两个集合 T(G) 和 BG)。其中 T(G)是遍历图时所经过的边的集合,B(G)是遍历图时未经过的边的集合。显然,G1(VT)是图G的极小连通子图。即子图G1 是连通图G的生成树。

                    最小代价生成树

                    最小生成树:给定一个无向网络,在该网络中的所有生成树中,使得各边的权值之和最小的那棵生成树称为该网的最小生成树,也叫最小代价生成树

                    最小生成树的典型用途

                    要在n个城市之间建立通信网,则n个城市应铺设n-1条线路,但是因为每条线路都会有对应的经济成本,而n个城市最多有n*(n-1)/2条线路,那么如何选择n-1条线路,使得总费用最小

                    构造最小生成树算法

                    MST概念

                    minimum spanning tree

                    MST性质:设N=(V,E) 是一个通网,U是顶点集V的一个非空子集。若边(u,v) 是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵包含边(u,v)的最小生成树。

                    在生成树的构造过程中,图中n个顶点分属两个集合:

                    • 已落在生成树上的顶点集合:U
                    • 尚未落在生成树上的顶点集合:V-U

                      接下来则应该在所有连通U中顶点和V-U中顶点的边中选取权值最小的边

                      普里姆算法(Prim)

                      算法思想:

                      克鲁斯卡尔算法(Kruskal)

                      算法思想:

                      两种算法比较

                      最短路径问题

                      典型用途: 交通网络的问题

                      从甲地到乙地之间是否有公路连通?在有多条通路的情况下,哪一条路最短?

                      交通网络用有向网来表示

                      • 顶点》表示地点
                      • 弧》表示两个地点有路连通
                      • 弧上的权值》表示两地点之间的距离、交通费或途中所花费的时间等

                        如何能够使一个地点到另一个地点的运输时间最短或运费最省?

                        这就是一个求两个地点间的最短路径问题

                        第一类:求两点间的最短路径

                        第二类:某源点到其他各点的最短路径

                        最短路径算法

                        单源点最短路径:迪杰斯特拉算法(Dijistra)

                        1.初始化: 先找出从源点v,到各终点v的直达路径 (vo,vk)即通过一条弧到达的路径

                        2.选择: 从这些路径中找出一条长度最短的路径 (vo,u)

                        3.更新:然后对其余各条路径进行适当调整: 若在图中存在弧 (u,vk) ,且 (vo,u) + (u,vk) < (vo,vk)则以路径 (vo,u,vk) 代替 (vo,vk)

                        在调整后的各条路径中,再找长度最短的路径,依此类推。

                        .

                        所有顶点间最短路径:弗洛伊德算法(Floyd)

                        算法思想:

                        • 逐个顶点试探
                        • 从Vi到Vj的所有可能存在的路径中选出一条最短的路径

                          有向无环图应用

                          有向无环图:无环的有向图,简称DAG图

                          AOV网

                          用一个有向图表示一个工程的各子工程及其相互制约的关系,其中以顶点表示活动,弧表示活动之间的优先制约关系,称这种有向图为顶点表示活动的网,简称 AOV网(Activity On Vertex network)。

                          特点
                          • 若从i到j有一条有向路径,则i是j的前驱j是i的后继
                          • 是网中有向边,则i是j的直接前驱;j是i的直接后继
                          • AOV网中不允许有回路,因为如果有回路存在,则表明某项活动以自己为先决条件,显然这是荒谬的。

                            问题:如何判别AOV 网中是否存在回路?

                            拓扑排序概念

                            为解决上诉问题,这里引出拓扑排序

                            在AOV 网没有回路的前提下,我们将全部活动排列成一个线性序列,使得若AOV 网中有弧 存在,则在这个序列中,i一定排在的前面,具有这种性质的线性序列称为拓扑有序序列,相应的拓扑有序排序的算法称为拓扑排序

                            拓扑排序的方法
                            拓扑排序的应用

                            检测AOV网中是否存在环:

                            对有向图构造其顶点的拓扑有序序列,若网中所有顶点都有在他的拓扑有序序列中,则该AOV网必定不存在环。

                            AOE网

                            有向图表示一个工程的各子工程及其相互制约的关系表示活动以顶点表示活动的开始或结束事件,称这种有向图为边表示活动的网,简称为AOE网 (Activity On Edge)。

                            对于AOE网,我们关心两个问题:

                            (1)完成整项工程至少需要多少时间?

                            (2)哪些活动是影响工程进度的关键?

                            关键路径-路径长度最长的路径

                            路径长度-路径上各活动持续时间之和

                            关键路径

                            参考资料:数据结构与算法基础-王卓老师