天天看点

# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结 十九章 图

教材学习内容总结

  1. 图的概念和特点
  2. 图的组成
  3. 图的类型
  4. 拓扑序的定义
  5. 图的算法
  6. 邻接表(正邻接表、逆邻接表、带权邻接表)
  7. 邻接矩阵

教材学习中的问题和解决过程

  • 问题1:我看到书上有这么一句话:“生成树的一个令人感兴趣的应用是找到带权图的最小生成树。最小生成树是其所含边的权值之和小于等于图的任意其他生成树的边的权值之和的生成树”,但并未能看懂其中的意思
  • 问题1解决方案:在上网查阅资料和例子之后,我明白了最小生成树是这个意思,一个图可以有多种生成树,同时要明白一个概念,每棵生成树的权值之和一定小于原图的权值之和。树有多样性,权值和也就多样性,在这其中会存在一个权值之和最小的生成树,这棵生成树就是最小生成树。
  • 问题2:我在有关图的PPT中看到有图的构造和储存方法之一——邻接多重表设计,但不能理解它的运作流程。
  • 问题2解决方案:XXXXXX
  • 问题3:图的例子中的结点序列和结果不知道如何得到的。
  • 问题3解决方案:XXXXXX
  • 问题4:我在PPT图中看到一个叫作AOE网的图,它其中有一个概念——关键路径:图中最长的路径。但例如在这张图中:
# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

最长路径不只一条,但它们的权值又不相同,试问哪条才是关键路径呢?

  • 问题5的解决方案:上网查找参考资料——AOE网。结合资料与个人分析

代码托管

# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

上周考试错题总结

  • 错题1及原因,理解情况
  • 错题2及原因,理解情况
  • ...

其他

  • 只有顶点没有边也是图,是图的一种特殊情况。
  • 网:边(或弧)上带权的图
  • 特殊的子图:
# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结
# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

下面的图可以看成是一个整体,那么该整体是上面图的子图;若将下面的图分成两部分来看,每一小部分也是上面图的子图。

  • 稀疏图和稠密图:有很少条边或弧(如e<nlogn,n是图的顶点数,e是弧数)的图称为稀疏图,反之成为稠密图。
  • 有向图的顶点排序:
# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

根据图,我们可以列出这样一个表:

顶点 引用
A
B A,C
C
D
E C,B,D

从而我们可以得到这么一个情况:

# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

从而这几个顶点的顺序为:A、C、B、D、E。同时,这一种将无序的顶点通过关系将其有序排列的做法叫做拓扑排序

拓扑排序的定义就是:由某个集合上的一个偏序(集合中仅有集合中仅有部分成员之间可比较)得到该集合上的一个全序(集合中全体成员之间均可比较

),这个操作称之为拓扑排序。

解析:图上的表就是一个偏序,通过表得到的顶点线性排列图表示的就是全序

唯一性:当图中的所有顶点指之间具有全序关系,那么拓扑排序的结果唯一;同时,所有顶点之间不具备全序关系,拓扑排序也就不唯一。

拓扑排序的特点:

  1. 图中所有的有向边均是从左指向右的
  2. 若图中存在有向环,则不可能使顶点满足拓扑次序。
# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结
  1. 一个DAG(无回路有向图)的拓扑序列通常表示某种方案切实可行。

AOV网加权值后的表达方式:

例:

# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

该图的拓扑排序是:

# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

表示方式:

# 20162317 2017-2018-1 《程序设计与数据结构》第10周学习总结

里面暗的点只是表示阶段,不是学科。

表示方式的图叫做AOE网,即带权有向图。图中最长的路径叫做关键路径。AOE图只有一个源点,只有一个汇点。

AOE网中的顶点和边是有含义和属性的:

  • 顶点表示事件(能被触发,两特征属性:最早发生时间Ve(j);最晚发生时间Vl(j))
  • 边表示活动(能被开始,两特征属性:最早开始时间e(i);最晚开始时间l(i)),权表示活动持续时间

.

  • Ve(j):是指从源点到汇点的最大路径长度。

计算方法:

(1)从前到后取值取较大值,最终获得路径长度的权值之和最大

(2)源点的值默认为0

用上方的AOE网图:

V1 V2 V3 V4 V5 V6
Ve(j) 32 96 142 74 194

计算顺序:

“------------------------------------------------------------------>”

  • Vl(j)

(1)从后到前取值取较小值,获得路径最长,最后权值最小的路径。

(2)汇点就是Ve(j)

用上方的AOE网图

“<-------------------------------------------------------------------”

  • e(i):若活动ai由弧<vk,vj>表示,则活动ai的最早开始时间应该等于事件vk的最早发生时间。因而,有:e[i]=ve[k]
c1 c2 c3 c4 c5 c6
e(i)
  • l(i):若活动ai由弧<vk,vj>表示,有l[i] = vj - ai

用上方的AOE网图:

66 98

计算关键路径的方法:

只需求出上面的四个特征属性,然后取e(i)=l(i)的边即为关键路径上的边。

由上面两个表格可知,e(i) = l(i)的有C6、C4、C5

所以最长路径是:

V1--C6-->V3--C4-->V4--C5-->V6

  • 关键路径的特点是:
  1. 关键路径上所有活动的持续时间总和就是项目的工期。
  2. 关键路径上的任何一个活动都是关键活动,其中任何一个活动的延迟都会导致整个项目完工时间的延迟。
  3. 若缩短关键路径的总耗时,会缩短项目工期
  4. 可以存在多条关键路径

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 15篇 400小时
第一周 200/200 2/2 20/20
第二周 20/220 1/3 20/40
第三周 645/865 1/4 14/54
第五周 654/1519 1/5 18/72
第六周 436/1955 1/6 16/88
第七周 839/2794 2/8 20/108
第八周 2143/4937 2/10 25/133
第九周 1368/6305 2/12 18/151
第十周 2452/8757 1/13 16/167
  • 计划学习时间:20小时
  • 实际学习时间:16小时