2019-2020-1学期 20192415
《网络空间安全专业导论》第三周学习总结
第七章 问题求解与算法设计
机器代码:用二进制数字表示操作的代码
汇编代码:使用助记忆码表示操作
7.1 如何解决问题
- 分治法:把一个大问题划分为几个能解决的小问题
算法(algorithm):在有限的时间内用有限的数据解决问题或子问题的明确指令集合
是在用编程语言进行编码之前要写的
计算机解决问题求解过程
粗线标明各阶段间的一般信息流
细线表明在发生问题时可以退回前面的阶段的路径
自顶向下的方法步骤:
1. 分析问题 2. 列出主要任务 3. 编写其余的模块 4. 根据需要进行重组和改写
测试算法:在编码算法的各种条件下运行程序,然后分析结果以发现问题
7.2 有简单参数的算法
简单变量是那些不能被分开的变量,是储存在一个地方的一个值。例:数字
7.2.1 带有选择的算法
IF (条件1)
Write "结果一"
ELSE IF (条件2)
Write "结果二"
7.2.2 带有循环的算法
计数控制循环
可以指定过程的重复次数
①初始化:控制循环变量初始化为某个初始值
②测试:控制循环变量是否已经达到特定值
③增量:循环控制变量以1递增
循环控制变量的初始值和布尔表达式中的运算关系符共同确定了循环执行的次数。
While循环:
表达式假,循环不执行;表达式真,循环一直执行。 永远不会终止的循环称为一个无限循环。
事件控制循环
重复次数是由循环体自身内发生的事件控制的
①事件必须初始化
②事件必须被测试
③事件必须更新
嵌套结构(nested structure):控制结构嵌入另一个控制结构的结构,又称为嵌套逻辑(nested logic)。
抽象步骤(abstract step):细节仍未明确的算法步骤
具体结构 (concrete step):细节完全明确的算法步骤
7.3 复杂变量
每一个地方只能储存一个数据,不能分割为更小的整体。
字符串不是不可分割的,因为其中不止包含了一个值。(但倾向于认为是不可分割的)
7.3.1 数组
搜索:搜索数组中的项,一次寻找一个特定的值
排序:按顺序将元素放入数组中
处理:包含对数组中的项所做的所有其他计算
7.3.2 记录
7.4 搜索算法
顺序搜索
AND 一假俱假
OR 一真俱真
NOT 改变表达式的值
有序数组中的顺序搜索
二分检索
二分检索(binary search):在有序列表中查找项目的操作,通过比较操作排除大部分检索范围。
二分检索快,但每个比较操作都需要更多的计算;且数组必须是有序的。
7.5 排序
- 选择排序:费空间
冒泡排序:
从数组最后一个元素开始,比较相邻的元素对; 如果下面的元素小于上面的元素,就交换这两个元素的位置。
插入排序
一个元素,有序; 两个元素,比较与交换; 第三个元素放入合适的位置。
7.6 递归算法
递归(recursion):算法调用它本身的能力
每次递归调用后,问题都应该减小→定尺寸系数
基本情况:答案已知
一般情况:调用自身来解决问题的更小版本的解决方案
子程序语言
调用单元:命名代码出现的地方
子程序:
①执行特定任务的命名代码 ②不仅执行任务,还返回给调用单元一个值
递归阶乘
数的阶乘的定义是这个数与0和它自身之间的所有数的乘积,即:
N!=N(N - 1)! 0的阶乘是1.
尺寸系数就是要计算阶乘的数。基本情况是:
Factorial(0)=1
一般情况是:
Factorial(N)=NFactorial(N - 1)
递归二分检索
快速排列
分解直到每一堆足够小,能够轻易的手动排序:策略基础是排序。
7.7 几个重要思想
信息隐蔽(information hiding):隐蔽模块的细节以控制对这些细节的访问的做法
抽象(abstraction):复杂系统的一种模型,只包括对观察者来说必需的细节
数据抽象(data abstraction):把数据的逻辑视图和它的实现分离开
过程抽象(procedural abstraction):把动作的逻辑视图和它的现实分离开
控制抽象(control abstraction):把控制结构的逻辑视图和它的现实分离开
控制结构(control structure):用于改变正常的顺序控制流的语句
事物命名:标志符
基本的测试分类:
白盒测试,基于代码本身;
黑盒测试,基于测试所有可能的输入值