20162320刘先润大二第10周作业
学号20162320 《程序设计与数据结构》第8周学习总结
教材学习内容总结
一、无向图
- 定义:和树一样,图由结点以及结点间的连接组成,在图中,结点称为顶点(vertice),结点的连接称为边(edge)。顶点通常有名字或标记表示,例如:顶点A和顶点B之间有条边表示为(A,B)。并且表示变得顶点对是无序的,意味着两点的双向连接。如果两个顶点有边连接,则称这两个顶点是邻接的(adjacent),但下图中A、D不是邻接。
- 含有最多条边的无向图是完全图,即顶点的变数达到最大。
- 如果无向图中任意两个顶点间都有路径,则称无向图是连通的(connected)
- 第一个顶点和最后一个顶点相同且边不重复的路径成为环(cycle),如路径A、B、C、D、A是环。没有环的路径称为无环图(acyclic)
二、有向图
- 定义:图中的边是顶点的有序对的图称为有向图(directed graph),如下图所示,有向图中的路径是连接图中两个顶点的有向边的序列。
- 树是图,有向树是一个有向图,其中指定一个元素为根,具有以下特性:
1.任何顶点到根都没有连接
2.到达每个非根元素的连接都只有一种
3.从根到每个顶点都有路径
三、带权图
- 定义:图的每条边上都有对应的权值的图称为带权图(weighted graph),如下图的城市火车票价图
四、图的算法
- 1.1图的遍历
图由两种遍历方式:一是类似于树的程序遍历的广度优先遍历(breath-first traversal),二是类似于树的先序遍历的深度优先遍历(depth-first traversal)。二者的主要差异在于用栈代替队列来管理遍历过程。 - 1.2测试连通性
连通性:包含n个顶点的图是连通的,并且仅当从图中的每个顶点v开始的广度优先遍历结果的长度是n
当且仅当从任意顶点开始的广度优先遍历中的得到的顶点数等于图中所含的顶点数时,图是连通的
-
1.3最小生成树
生成树(spanning tree)是包含图中所有顶点及图中部分边的一棵树。最小生成树是其所含边的权值之和小于等于图的任意其他生成树的边的权值之和的生成树 -
1.4判定最小路径
图有两种最短路径的判定定义,一是判定两个顶点之间边数最少的路径,二是在带权图中找到最短路径
教材学习中的问题和解决过程
- 问题1:图和树有什么差别?
解答:图是更一般的概念,它不约束除根结点之外的每个顶点有且只能有一个父节点。图中没有根,每个顶点都能与最多n-1个其他顶点相连。 - 问题2:无向图的中的边最多是多少个?对于有向图呢?
解答:对于无向图来说,因为每条边可以看作是两个顶点的集合,由于是完全图,所以相当于找n个顶点中取两个点的取法,一共是C(n,2)=n(n-1)/2条边。对于有向图来说,设D=为n阶有向简单图(即不含平行边,也不含环的图),若对于任意的顶点u,v属于V,既有有向边,又有,则称D是n阶有向完全图.数目求法:利用乘法原理,n×(n-1)就是最多的有向图边。
代码学习中的问题及解决
- 问题1:实现代码排序的逆序操作
解答:利用冒泡排序,修改其中一部分源码为if (data[scan].compareTo(data[scan + 1]) < 0)
,即通过比较将小的值放到右边,得到逆序的队列排序。测试截图如下。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1:
When removing an element from a binary search tree, we must always ______________________.
A . make sure that the new tree is a binary search tree
B . build a new tree
C . find its inorder successor
D . remove all of its children
E . An element should never be removed from a binary search tree.
解答:我选的是C,因为教材上说过,当删除一个元素时,需要找到它在中序遍历的后一个元素来代替。正确答案是A,因为找代替的前提是确定子树是一个新的二叉查找树。
- 错题2:
In a balanced binary search tree, adding an element always requires approximately O(log2 n) steps.
A . true
B . false
解答:这句话是正确的,在二进制搜索树中添加一个元素需要与查找元素一样多的步骤。由于加入了寻找一个平衡的二叉搜索树的元素总是需要O(log2n)的步骤,添加一个元素也一样。
结对及互评
点评过的同学博客和代码
- 本周结对学习情况
其他(感悟、思考等,可选)
Chase the wind and touch the sky,A stars light shines on long after it dies,In the night,Live everyday as if it's your last.坚持下去,加油!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 188 | 1/1 | 25 | 算法分析 |
第二周 | 70/258 | 1/2 | 15/40 | 《构建之法》7-9章 |
第三周 | 474/732 | 1/3 | 20/60 | 查找和排序 |
第四五六周 | 1313/2045 | 4/7 | 12/72 | 栈和队列 |
第七周 | 890/2935 | 1/8 | 14/86 | 树 |
第八周 | 913/3848 | 1/9 | 20/106 | 二叉查找树 |
第九周 | 890/3738 | 1/10 | 13/119 | 堆 |
第十周 | 637/4374 | 2/12 | 18/137 | 图 |
第十一周 |
- 计划学习时间: 20+小时
- 实际学习时间: 25小时
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)