学号 2019-2020-20182318 《数据结构与面向对象程序设计》第十周学习总结
教材学习内容总结
图
与树类似,图由结点和这些结点之间的连接构成。
- 顶点(vertice):就是结点。
- 边(edge):就是这些结点连接起来的线段。
- 路径(path):图中的一系列边,每条边连通两个顶点。
- 路径的长度(length):是该路径中边的条数(或者是顶点数减去1)。
- 环路(cycle):一种首结点和末结点相同且没有重边的路径。没有环路的图称为无环的(acyclic)。
- 完全图(completegraph):含有最多条边的无向图
无向图
- 边没有方向的图称为无向图。
- 含有最多条边的无向图称为完全图:Edges=(n-1)*n/2.
- 如果无向图中任意两个顶点间都有路径,则无向图称为连通的。
- 路径是连接图中两个顶点的边的序列,路径长度为路径所含边的数目(顶点个数减一)
- 第一个顶点和最后一个顶点是同一个顶点且没有重复边的路径,称为一个环。
- 如果图中两个顶点之间有边连接,则称这两个顶点是邻接的(邻居),自己连接到自己的边称为自循环或悬挂。
有向图
- 如果给图的每条边规定一个方向,那么得到的图称为有向图,其边也称为有向边。在有向图中,与一个节点相关联的边有出边和入边之分,而与一个有向边关联的两个点也有始点和终点之分。
- 顶点是有序对的图称为有向图,有向图的每条边都带有一个移动方向,这个方向有顶点的顺序指定,所以(A,B)表示只允许从A移动到B,但不允许另一个方向的移动。
- 树就是图,树的大部分工作是针对有向树。有向树是一个有向图。
带权图
- 每条边都对应一个权值的图成为带权图,有时也成为网络。
- 无向,有向带权图
常用的图的算法
图的遍历:
- 广度优先遍历:从一个顶点开始,辐射状地优先遍历其周围较广的区域。就如同树中的层次遍历。
- 深度优先遍历:图的深度优先搜索,类似于树的先序遍历,所遵循的搜索策略是尽可能“深”地搜索图。就如同树中的前序遍历。
测试连通性:
- 连通性:图中的任意两个顶点之间都存在一条路径,则认为这个图是连通的。
测试方法:
- 从任意结点开始的广度优先遍历中得到的顶点数等于图中所含顶点数。
- 生成树(spanning tree):包含图中所有顶点及图中部分边的一棵树。
- 最小生成树(minimum spanning tree):所含边权值之和小于其他生成树的边的权值之和。
Prim算法和Kruskal算法
- 判定最短路径:
判定起始顶点和目标顶点之间是否存在最短路径(两个顶点之间边数最少的路径)。
在加权图中找到最短路径。(Dijkstra算法)
图的实现策略:
- 邻接列表:用一种类似于链表的动态结点来存储每个结点带有的边。这种链表称为邻接列表。
- 邻接矩阵:用一种叫邻接矩阵的二维数组来表示任意两个顶点的交接情况。
- 无向图的邻接矩阵一定是对称的,有向图的邻接矩阵不一定对称。
- 十字链表法
教材学习中的问题和解决过程
- 问题1;深度遍历算法,感觉不能遍历所有的元素
- 问题1解决办法;经过上网查询后,发现是自己没弄清楚。深度遍历,查询到如果查最后底部,要返回上一节点,从另一分支继续查,直至所有的分支查完。
- 问题2;图怎么生成树
- 问题2解决方案;参考了博客图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
代码调试中的问题和解决过程
- 问题1:在编译时无法载入
- 问题1解决方案:自己百度,更改了路径即可。
- 问题2:在写有向图和无向图的代码时,图中删除结点操作,能否调用删除边的操作。
- 问题2解决方案:我认为 ,删除结点,就是把结点与其他结点的边删除,然后结点个数减1。
但是这样是有缺陷的。删除结点后,结点消失;但是删除边,边消失,节点依然存在,因此没有起到相同的效果。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
上周没有考试,无错题
点评过的同学博客和代码
- 本周结对学习情况
- 20182333
- 结对照片
- 结对学习内容
其他(感悟、思考等,可选)
Java学习一刻也不能放松,安卓自学还要加强
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第十周 | 2812/200 | 2/2 | 26/20 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:20小时
-
实际学习时间:18小时
-
改进情况:下周多练习
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)