2021-2022-1 20211408 《信息安全专业导论》第6周学习总结
2021-2022-1 20211408 《信息安全专业导论》第6周学习总结
作业信息
这个作业属于哪个课程 | 2020-2021-1信息安全专业导论 |
---|---|
这个作业要求在哪里 | 2020-2021-1信息安全专业导论第六周作业 |
这个作业的目标 | Polya如何解决问题、简单类型与组合类型、复合数据结构、查找与排序算法、算法复杂度、递归、代码安全 |
作业正文 | pep9、XOR加密 |
教材学习内容总结
- 描述计算机求解过程:
- 第一步理解问题,要问各种各样的问题,比如未知量是什么,条件是什么,条件能满足吗等等。
- 第二步设计方案,找到数据与未知量的关联,思考能否直接解决,若不行,考虑辅助问题;想想相关问题,思考可否用当时解决相关问题的方法来解决;寻找熟悉的情况
- 分治法:把大问题分割成几个能解决的小单元
- 第三步执行方案,检查步骤
- 第四步分析得到的解决方案,即回顾看看它能否解决问题,能否用来解决其他问题等等
与polya问题求解策略相似的设计方法是自顶向下设计
- 简单类型和复合类型
简单变量类型是那些不能被分开的变量,而复合变量类型指那些可分割的数据,如字符串,包含了很多值,并非单独的个体。 - 描述三种复合数据结构机制
- 数组:
- 同构项目的有名集合,可通过单个项目的位置访问它们。索引从0开始;与数组有关的算法为:搜索、排序和处理,其中处理是包含了对数组中所有项所做的所有其他运算。
- 记录:
- 异构项目的有名集合,可通过名字单独访问项目,异构指的是集合种元素类型不必相同,比如[1,2.0,'w']。
- 类:
- 类是对现实生活中一类具有共同特征的事物的抽象,如大象、狮子、老虎这些都是动物类的。
- 数组:
- 递归问题
在算法中调用自己的算法叫递归算法,递归就是算法调用它本身的能力。递归有至少两种情况:基本情况和一般情况,基本情况是答案已知,一般情况是调用自身来解决问题的更小版本。- 子程序语句:其一为执行特定任务,然后返回给调用单元一个值(return),用作表达式;另一种为执行特定任务的命名代码,用作语句
- 例子:阶乘、二分检索、快速排序
- 无序数组与有序数组
如:[65,23,70,89]为无序数组,而[23,65,70,89]为有序数组 - 选择排序与插入排序
- 选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,每个都要进行比较,很费力。
- 插入排序:第一次比较前两个数,然后把第二个数按大小插入到有序表中; 第二次把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程,比选择排序省力很多。
总之:对于一个完全有序的数组:用选择排序,还是得一个个去比较,比如1,2,3,4;1要分别与2,3,4,比较,排序完需要进行4 * 4-4=12次,对于数组有n个元素来说既是要比较:n * (n-1)次;但是对于插入排序,从2开始,2只要跟1比较一次,3只要跟2比较一次,4只要跟3比较一次,这样下来,对于n个元素:只需要(n-1)次比较。
-
快速排序算法
基本策略就是“分治法”,基础就是递归,每次分成两小堆,再对两小堆中每一堆进行同样的办法划分,不用每一堆都一样数量,一直分到小到不用再分,找到splitpoint,确定splitval,小于split point的在一边,大于splitpoint的在另一边,从两头寻找,若遇到位置不正确的值,交换它们。然后first与splitval交换 -
排序实例:
-
冒泡排序:
[23,12,56,6]
第一次迭代:[23,12,6,56]>>>>>[23,6,12,56]>>>>>[6,23,12,56]
第二次迭代:[6,12,23,56]
排序完毕,结果为[6,12,23,56]
python结果:
-
选择排序
[23,12,56,6]
找到最小元素6,与23比较,交换[6,12,56,23]
6不动,看第二个元素12,找到最小元素23,与12比较,不动
12不动,看第三个元素56,与23比较,交换
排序完毕,结果为[6,12,23,56]
python结果:
-
插入排序
[23,12,56,6]
假设23排序完成,则与12比较,换位置,即[12,23,56,6],然后默认第一位排序完毕,将23与56进行比较,不动,则默认第一位第二位排序完毕,然后将56与6进行比较,交换位置,即[12,23,6,56],将6与23比较,交换,再与12比较,交换
排序完毕,结果为[6,12,23,56]
python结果:
-
快速排序
[23,12,56,6]
分裂值为23
从右往左找出比23小的值6,交换,即[6,12,56,23];从左往右找出比23大的值56,交换到原本23的位置,即[6,12,23,56]
排序完毕
python结果:
-
-
二分检索算法
用python实现:寻找并打印所在位置
教材学习中的问题和解决过程
- 问题1:对各种排序方法光看书理解的还不是很透彻、到位。
- 问题1解决方案:通过举一些实例,自己动手实操,并网上搜了一些用python实现的代码,尝试去理解代码并自己敲了一遍,大致明白了每个排序都是什么样的。其中代码以及实操的例子在总结中已体现,此处不再赘述。
代码调试中的问题和解决过程
- 问题1:在定义类变量的时候,“__ init __ ” 写错成 “ __ int __”,使得运行错误
- 问题1解决方案:通过云班课提问,解决了该问题
代码托管
二分检索、插入排序、快速排序、冒泡排序、选择排序、xor加密
上周考试错题总结
- 错题1:Which of the following is a device that performs a basic operation on electrical signals?
A.Logic symbol B.Truth table C.Gate D.Circuit E.S-R. latch
此题意思为“以下哪一项是对电信号执行基本操作的设备”,因此是门。 - 错题2:The following equation is an example of which Boolean algebra property?
A.Commutative B.Associative C.Distributive D.Identity E.Complement F.De Morgan's law
此题意思为“下面的等式是布尔代数属性的一个例子”,b为结合律,是布尔代数的一个例子 - 错题3:The central processing unit (CPU) of a computer is often a single integrated circuit.
此题是正确,意思为“计算机的中央处理器(CPU)通常是单个集成电路” 。 - 错题4: Which of the following is a device that allows a computer to connect to the Internet?
A.Hertz B.Pentium 4 C.Random access D.Cycles per second E.Modem
此题意思为“以下哪一项是允许计算机连接到Internet的设备”,应是调制解调器。 - 错题5: Which of the following contains the instruction register?
A.Control unit B.Arithmetic/logic unit C.Auxiliary storage device D.RAM E.ROM
此题意思为“以下哪项包含指令寄存器”,即控制单元。 - 错题6: Which of the following is a computing technique in which multiple processors each contribute one part of an overall computation?
A.Synchronous processing B.Task-level parallelism C.Data-level parallelism D.SIMD(single instructions, multiple data) E.Rotation delay - 错题7: A computer's front-side bus (FBS) is small, fast memory that is usually built into the processor chip.
此题应是错误。FSB是将CPU连接到北桥芯片的总线,不是内存 - 错题8: The program counter is a register that stores the number of instructions executed by a computer.
此题应是错误。程序计数器不是寄存器。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 | |
第五周 | 300/1600 | 3/11 | 30/120 | |
第六周 | 300/1900 | 3/14 | 30/150 |
-
计划学习时间:30小时
-
实际学习时间:30小时
-
改进情况:在学习上一章的时候,对于机器语言与汇编语言并没有深入的研究下去,这一章对于这些排序问题,我进行了一定的深入学习。
参考资料
- 《计算机科学概论》
- ...