2021-2022-1 20211420《信息安全专业导论》第七周学习总结
作业信息
|作业属于|2021-2022-1信息安全专业导论
|作业要求|2021-2022-1信息安全专业导论第七周作业
- 学习目标
- 数组与链表
- 基于数组和基于链表实现数据结构
- 无序表与有序表
- 树
- 图
- 子程序与参数
|班课作业链接|
求最大公约数伪代码
fibnacci数列递归实现
实现进制转化伪代码
教材学习内容总结
学习了计算机科学概论的第8章内容,我学到了以下内容
-
抽象数据类型
- 抽象数据类型:属性(数据和操作)明确地与特定实现分离的容器
- 数据结构(栈和队列):一种抽象数据类型中的复合数据域的实现
- 容器:存放和操作其他对象的对象
-
栈
- 栈:一种抽象复合结构,只能从一端访问栈中的元素
- 后进先出(LIFO):可在第一个位置插入元素,也可删除第一个元素的处理,被删除的元素停留时间最短
- 习惯语:插入叫Push(推进),删除叫Pop(弹出)
-
队列
- 队列:一种抽象复合结构
- 先进先出(FIFO):项目从一端入另一端出的行为
- 项目插入和删除:插入在队列尾部,删除在队列头部,删除的元素停留时间最长
-
列表
- 三个属性:项目同构,项目线性,列表变长
- 线性:每个项目除了第一个都有一个独特的组成部分在它之前,除了最后一个也都有一个独特的组成部分在它之后
- 操作:插入,删除,检索以及报告列表中项目数量(项目必须能够相互比较)
- 区分列表和数组:数组是内嵌结构,列表是抽象结构
- 链式结构
- 链式结构:以节点的概念为基础,一个将数据项和找到下一个位置的信息保存到同一容器的实现方法
- 节点:由两部分构成,即用户的数据和指向列表的下一个节点的链接或指针
- 列表最后一个节点的指针变量存放的是表示列表结束的符号,通常为null,用“/”表示
-
树
- 二叉树
- 二叉树:一种抽象结构,每个节点可以有两个后继节点,叫做子女,根节点和每个节点之间都有且只有一条路径
- 根:树的头部(一个起始节点)
- 左(右)节点:一个节点左(右)边有子节点存在
- 树叶:没有子女的树节点
- 二叉检索树
- 二叉检索树具有二叉树的形状属性,节点可以是0,1或2个子女
- 二叉检索树的搜索效率与树的形状有直接关系
- 对于二叉检索树的任意一个结点,设其值为K,则该结点左子树中任意一个结点的值都小于K;该结点右子树中任意一个结点的值都大于或等于K。
- 对于一组数,将这组数的两个排列按规则插入到BST中,如果采用中序遍历将各个结点打印出来,则会得到由小到大排列的相同序列。如下图
- 检索n二叉检索树的效率就在于只需检索二个子树之一。
- 从根结点开始,在二叉检索树中检索值K。
- 如果根结点储存的值为K,则检索结束。
- 如果K小于根结点的值,则只需检索左子树。
- 如果K大于根结点的值,就只检索右子树。
这个过程一直持续到K被找到或者我们遇上了一个叶子节点。
如果遇上树叶仍没有发现K,那么K就不在该二叉检索树中。
- 二叉检索树结点的删除
对于二叉检索树,删除一个结点,相当于删除有序序列中的一个记录,要求删除后能保持二叉检索树的排序特性,并且树高变化较小。
(1)找到值为val的结点rt
(2)rt为叶,可以直接删除
(3)rt左空或右空,可以让它的右子树或左子树直接代替原rt
(4)rt左右都不空,可以让右子树中的最小值代替原rt
- 二叉树
-
- 图:由一组节点和一组把节点互相连接起来的边构成的数据结构
- 顶点:图中的节点
- 边(弧):表示图中两个节点的连接的顶点对
- 无向图:其中的边没有方向的图
- 有向图:其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图
- 邻顶点:由一条边相连的两个顶点
- 路径:连接图中两个顶点的一系列顶点
- 图中定义的算法可以解决实际问题
- 图算法
-
子程序
- 许多子程序都是高级语言或语言附带库的一部分
- 参数传递
- 参数列表:程序中两部分之间的通信机制
- 形参:列在子程序名后的括号中的标识符
- 实参:子程序调用中列在括号中的标识符
- 将值和长度绑定在一起形成一个记录,称为列表,并把它传递给需要它的子程序
- 实参个数必须与形参个数相同
-
值参与引用参数
- 值参:由调用单元传入实参的副本的形参
- 引用参数:由调用单元传入实参的地址的形参
学习Python教材后,我学会使用函数设计程序以及使用python中的模块设计程序
教材学习中的问题和解决过程
问题:学习计算机科学概论第8章中的三种搜索方式时,没有看懂这三个搜索方式的运作原理
解决过程:结合教材上的内容,我到网上查询了相关资料,明白了三种搜索顺序的运作原理
- 深度优先搜索就是需要一条路一直走到底,看是否能达到目的,如果不能就返回原值走下一条,重复这个过程,直到找到合适路径
- 广度优先搜索就是从一个节点开始,访问各个该节点的邻节点,然后再访问访问过的邻节点的未被访问的邻节点,一直重复这个过程,直到所有节点都被访问过
- 单源最短路搜索就是找到一条该路径上权值之和最小的路径,权值可以自定,例如时间,英里数等
代码调试中的问题和解决过程
问题:在做本周进制转换伪代码的任务时,在调试代码时出现如下图的问题
解决过程:这里的代码调试出现问题原因在于没有理解到需要用余数去对应字典中的键值,而不是用商对应字典中的键值,因此把dict1[str(int(quotient))]中的quotient改成remainder问题就解决了
解决后的代码调试
代码托管
斐波那契数列求Fib(n)
上周考试错题总结
1.Which language is actually executed by the central processing unit of a computer?
计算机的中央处理器实际执行哪种语言?
A. High-level language
B. Assembly language
C. Machine language
D. Virtual language
E. Accumulator language
正确答案选C.机器语言
2.Which of the following is part of a Pep/9 program instruction?
以下哪项是Pep/9程序指令的一部分?
A. Accumulator
B. Simulator
C. Program counter
D. Specifier
E. Register
本题选D.标识符
3.The Pep/9 system includes a simulator that can be used to input and run programs.
Pep/9系统包括一个模拟器,可用于输入和运行程序。
本题正确
4.The data-coverage testing approach tests the limits of the program’s data.
数据覆盖率测试方法测试程序数据的限制。
本题正确
5.A test case is a document that specifies how a program is to be tested.
测试用例是指定如何测试程序的文档。
本题错误,测试用例就是一个用来测试的例子
学习感受
经过不断写代码的练习,感觉自己写代码的能力变强了
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 50/50 | 4/4 | 20/20 | |
第二周 | 100/150 | 2/6 | 15/35 | |
第三周 | 150/300 | 2/8 | 12/47 | |
第四周 | 1000/1300 | 5/13 | 36/83 | |
第五周 | 300/1600 | 4/17 | 30/113 | |
第六周 | 1400/3000 | 3/20 | 36/149 | |
第七周 | 1500/4500 | 4/24 | 40/189 |
计划学习时间:32小时
实际学习时间:40小时
改进情况:本周的学习速度加快了,完成老师布置的任务速度也变快了,继续保持
参考资料
《计算机科学概论》
[《看漫画学Python》]