1 / 39

第 8 章 图的应用

第 8 章 图的应用. 1. 图的生成树和最小生成树. 2. 3. 最短路径. 拓扑排序. 4. 关键路径*. 主要内容. 8.1 图的生成树和最小生成树. 8.1.1 生成树和最小生成树的概念 8.1.2 普里姆算法 8.1.2 克鲁斯卡尔算法. 8.1.1 生成树和最小生成树的概念. 生成树 定义:所有顶点均由边连接在一起,但不存在回路的图叫生成树 深度优先生成树与广度优先生成树 一个图可以有许多棵不同的生成树 所有生成树具有以下共同特点: 生成树的顶点个数与图的顶点个数相同 生成树是图的极小连通子图

gloria-todd
Download Presentation

第 8 章 图的应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 图的应用

  2. 1 图的生成树和最小生成树 2 3 最短路径 拓扑排序 4 关键路径* DS 主要内容

  3. DS 8.1 图的生成树和最小生成树 • 8.1.1 生成树和最小生成树的概念 • 8.1.2 普里姆算法 • 8.1.2 克鲁斯卡尔算法

  4. DS 8.1.1 生成树和最小生成树的概念 • 生成树 • 定义:所有顶点均由边连接在一起,但不存在回路的图叫生成树 • 深度优先生成树与广度优先生成树 • 一个图可以有许多棵不同的生成树 • 所有生成树具有以下共同特点: • 生成树的顶点个数与图的顶点个数相同 • 生成树是图的极小连通子图 • 一个有n个顶点的连通图的生成树有n-1条边 • 生成树中任意两个顶点间的路径是唯一的 • 在生成树中再加一条边必然形成回路 • 含n个顶点n-1条边的图不一定是生成树

  5. 0 0 1 4 5 2 1 4 5 2 3 7 6 3 7 6 0 0 1 4 5 2 1 4 5 2 3 7 6 3 7 6 DS 8.1.1 生成树和最小生成树的概念 深度优先生成树 连通图 任意一颗生成树 广度优先生成树

  6. 0 5 8 3 1 3 15 12 2 6 10 7 2 6 9 4 5 DS 8.1.1 生成树和最小生成树的概念 • 最小生成树 • 问题提出 要在n个城市间建立通信联络网 顶点--表示城市 权--城市间建立通信线路所需花费的代价 希望找到一棵生成树,它的每条边上的权值之和(即建立该通信网所需花费的总代价)最小--最小代价生成树

  7. DS 8.1.1 生成树和最小生成树的概念 • 问题分析 n个城市间,最多可设置n(n-1)/2条线路 n个城市间建立通信网,只需n-1条线路 问题转化为:如何在可能的线路中选择n-1条,能把所有城市(顶点)均连起来,且总耗费各边权值之和)最小 • 构造最小生成树方法 • 方法一:普里姆(Prim)算法 • 方法二:库鲁斯卡尔(Kruskal)算法

  8. DS 8.1.2 普里姆算法 • 算法思想:设N=(V,{E})是连通网,TE是N上最小生成树中边的集合 • 初始令U={u0},(u0V), TE= • 在所有uU,vV-U的边(u,v)E中,找一条代价最小的边(u0,v0) • 将(u0,v0)并入集合TE,同时v0并入U • 重复上述操作直至U=V为止,则T=(V,{TE})为N的最小生成树

  9. 0 0 5 5 8 3 1 3 3 15 12 2 6 10 7 2 0 0 5 6 5 9 3 4 5 3 1 3 0 0 1 3 5 5 15 3 3 1 1 3 3 2 6 2 7 7 2 2 6 7 6 2 4 5 7 4 5 5 2 5 DS 8.1.2 普里姆算法 0 0 5 3 1 3

  10. DS 8.1.2 普里姆算法 • 算法实现:图用邻接矩阵表示 • 算法描述 • 算法评价: • 时间复杂度O(n²) • 空间复杂度O(1) • 利用算法得到的边集数组为:

  11. DS 8.1.3 克鲁斯卡算法 • 算法思想:设连通网N=(V,{E}),令最小生成树 • 初始状态为只有n个顶点而无边的非连通图T=(V,{}),每个顶点自成一个连通分量 • 在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边,选取下一条代价最小的边 • 依此类推,直至T中所有顶点都在同一连通分量上为止

  12. 18 0 1 5 23 12 4 2 8 5 25 15 10 4 3 20 DS 8.1.3 克鲁斯卡算法

  13. DS 8.1.3 克鲁斯卡算法 • 算法实现:图用边集数组表示 • 算法描述 • 算法评价: • 时间复杂度O(n²) • 空间复杂度O(n²)

  14. DS 8.2 最短路径 • 8.2.1 最短路径的概念 • 8.2.2 从一顶点到其余各顶点的最短路径 • 8.2.3 每对顶点之间的最短路径*

  15. 北京 太原 兰州 920 1120 郑州 210 徐州 720 西安 640 济南 540 340 190 DS 8.2.1 最短路径的概念 • 旅客希望停靠站越少越好,则应选择: 济南——北京——太原——兰州 • 旅客考虑的是旅程越短越好,则应选择: 济南——徐州——郑州——西安——兰州

  16. DS 8.2.1 最短路径的概念 • 最短路径:从一顶点到另一顶点间路径长度最短(即经过的边数最少)的那条路径叫做最短路径,其路径长度叫做最短路径长度或最短距离。 • 带权路径长度:在带权图中,把从一个顶点i到图中其余任一个顶点j的一条路径上所经过边的权值之和定义为该路径的带权路径长度。路径长度最短(即其值最小)的那条路径称做最短路径,其权值称做最短路径长度或最短距离。

  17. 0 5 3 30 4 1 10 12 8 25 2 3 4 DS 8.2.1 最短路径的概念 • V0~V4的路径有: • {0,4}:长度为30 • {0,1,3,4} :长度为23 • {0,1,2,4}:长度为38

  18. DS 8.2.2 从一顶点到其余各顶点的最短路径(Dijkstra) • 思想:贪心算法(局部最优),按路径长度递增的次序产生最短路径。 • 贪心算法: 利用局部最优来计算全局最优。 • Dijkstra:利用已得到的顶点的最短路径来计算其它顶点的最短路径。

  19. 0 5 3 30 4 1 10 12 8 25 2 3 4 DS 8.2.2 从一顶点到其余各顶点的最短路径(Dijkstra)

  20. DS 8.2.2 从一顶点到其余各顶点的最短路径(Dijkstra) • 算法

  21. DS 8.3 拓扑排序 • 8.3.1 拓扑排序的概念 • 8.3.2 拓扑排序算法

  22. DS 8.3.1 拓扑排序的概念 • 问题提出:学生选修课程问题 顶点--表示课程 有向弧--表示先决条件,若课程i是课程j的先决条件,则图中有弧<i,j> 学生应按怎样的顺序学习这些课程,才能无矛盾、顺利地完成学业--拓扑排序

  23. DS 8.3.1 拓扑排序的概念 • AOV网:用顶点表示活动,用弧表示活动间先后关系的有向图称为顶点活动网(Activity On Vertex network),简称AOV网 • 若<vi,vj>是图中有向边,则vi是vj的直接前驱;vj是vi的直接后继 • AOV网中不允许有回路,这意味着某项活动以自己为先决条件

  24. DS 8.3.1 拓扑排序的概念 • 拓扑序列:在AOV网中,若不存在回路,则所有活动可排列成一个线性序列,使得每个活动的所有前驱活动都排在该活动的前面,此序列叫做拓扑序列。 • 拓扑排序:有AOV网构造拓扑序列的过程叫做拓扑排序。该序列不是唯一的。 • 实现方法: • 选择一个入度为0的顶点并输出之 • 从网中删除此顶点及所有出边 • 重复上述两步,直至不存在入度为0的顶点为止

  25. C8 C9 C7 C1 C3 C4 C2 C5 C6 DS 8.3.1 拓扑排序的概念 • 拓扑序列: • C1, C8, C9, C2, C3, C5, C4, C7, C6 • C2, C1, C3,C5,C4,C6,C8,C9,C7

  26. ^ ^ 2 5 5 4 2 3 3 2 ^ ^ ^ ^ DS 8.3.2 拓扑排序算法 • AOV网采用邻接表作为存储结构 • 数组 d[ ] 存放顶点的入度 • 将所有入度为0的顶点链接成一个栈

  27. 0 2 1 4 3 2 2 5 3 3 5 4 5 5 -10 2 2 1 3 0 0 2 2 1 3 -10 2 2 1 3 -1 0 2 2 1 3 -1 0 1 1 0 3 -1 0 1 1 0 2 -1 0 1 1 0 3 入度表top=-1 输出 1 4

  28. 0 2 1 4 3 2 2 5 3 3 5 4 5 5 -1 0 1 1 0 2 -10-1 1 0 2 -10-1-10 1 -10-1-10 -1 -10-1-10 -1 输出 1 4 0 2 3 5

  29. 0 2 1 4 3 2 2 5 3 3 5 4 5 5 2 0 5 3 1 4 DS 8.3.2 拓扑排序算法 2 0 5 3 1 4 1 4 0 2 3 5

  30. DS 8.3.2 拓扑排序算法 • 算法实现 • 算法分析:时间复杂度为O(n+e)

  31. DS 8.4 关键路径 • 8.4.1 顶点事件的发生时间 • 8.4.2 计算关键路径的方法和算法

  32. 7 2 a4=1 a1=6 a7=9 a10=2 9 1 5 a2=4 a5=1 a8=7 a11=4 8 3 a3=5 a9=4 a6=2 4 6 DS 8.4.1 顶点事件的发生时间 • 把工程计划表示为有向图,用顶点表示事件,弧表示活动;每个事件表示在它之前的活动已完成,在它之后的活动可以开始。 • 例设一个工程有11项活动,9个事件 事件 V1--表示整个工程开始 事件V9--表示整个工程结束 问题:(1)完成整项工程至少需要多少时间? (2)哪些活动是影响工程进度的关键?

  33. DS 8.4.1 顶点事件的发生时间 • AOE网(Activity On Edge)——也叫边表示活动的网。AOE网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续时间 • 路径长度——路径上各活动持续时间之和 • 关键路径——路径长度最长的路径 • Ve(j)——表示事件Vj的最早发生时间 • Vl(j)——表示事件Vj的最迟发生时间 • e(i)——表示活动ai的最早开始时间 • l(i)——表示活动ai的最迟开始时间

  34. ai j k DS 8.4.1 顶点事件的发生时间 • l(i)-e(i)——表示完成活动ai的时间余量 • 关键活动——关键路径上的活动叫关键活动,即l(i)=e(i)的活动 • 如何找e(i)=l(i)的关键活动? 设活动ai用弧<j,k>表示,其持续时间记为:dut(<j,k>) 则有:(1)e(i)=Ve(j) (2)l(i)=Vl(k)-dut(<j,k>)

  35. (1)从Ve(1)=0开始向前递推 (2)从Vl(n)=Ve(n)开始向后递推 DS 8.4.1 顶点事件的发生时间 • 如何求Ve(j)和Vl(j)?

  36. 顶点 Ve Vl 7 2 a4=1 a7=9 a1=6 a10=2 9 1 5 a2=4 a5=1 a8=7 a11=4 8 3 a3=5 a9=4 a6=2 4 6 DS 8.4.2 计算关键路径的方法和算法 • 关键路径步骤 • 求Ve(i),Vl(j),e(i),l(i),计算l(i)-e(i) V1 V2 V3 V4 V5 V6 V7 V8 V9 0 6 4 5 7 7 16 14 18 0 6 6 8 7 10 16 14 18

  37. a1=6 a7=9 7 2 a10=2 a4=1 9 a2=4 1 5 a5=1 a8=7 a11=4 8 3 a3=5 a9=4 a6=2 4 6 活动 e l l-e 14 0 5 7 0 0 7 7 16 4 6 6 14 8 7 6 7 2 0 16 10 3 3 0 0 3 3 2 0 2 0 0 0 顶点 Ve Vl DS 8.4.2 计算关键路径的方法和算法       a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 V1 V2 V3 V4 V5 V6 V7 V8 V9 0 6 4 5 7 7 16 14 18 0 6 6 8 7 10 16 14 18

  38. DS 8.4.2 计算关键路径的方法和算法 • 计算关键路径的算法 • 用邻接表实现 • 时间复杂度:O(n+e) • 调试图的拓扑排序算法和关键路径算法的程序

  39. DS 作业 • P302 • T习题8-1:1,2,6,7

More Related