循环与递归
构造出“不变式”的“循环条件”、“循环体”。
循环设计要点;1. 设计要注意算法的效率 累加、累乘 2. “自顶向下”的设计方法:先整体后局部,先抽象后具体
递归设计要点:一个过程或函数在其定义或说明中直接或间接调用自身的一种方法,找出递归关系和递归终止条件。分析问题、寻找递归关系,设置边界、控制递归,设计函数、确定参数。
hanoi(n,a,b,c)
第一步:先把上面“一个“盘子以a基座为起点借助b基座移到c基座 hanoi(n-1, a, c, b)
第二步:把下面一个盘子从a基座移动到b基座
第三步:再把c基座上的”一个“盘子借助a基座移到b基座 hanoi(n-1, c, b, a)
递归算法比循环算法耗费更多的时间和存储空间,也限制了递归的深度----->转为等价的循环,提高算法的时空效率;树的前中后序遍历、图的深度优先,”后进先出“用递归算法
具体考虑内容:
1. 逻辑结构表示数据3个层次:数据项、数据元素、数据元素的关系
2. 逻辑结构便于存储实现
3. 存储方式选择,考虑数据的规模
4. 数据结构一定要方便处理功能的实现
5. 数据结构还要便于提高算法的时空性能
6.连续存储:基于存储的考虑,顺序表过大造成浪费,过小造成溢出;基于运算的考虑,顺序表访问O1,链式表访问On;基于环境的考虑,查询统计选顺序存储,插入、删除选链式存储
- 原始信息与处理结果对应存储:拉选票
- 数组是信息有序化:将35706翻译成”three-five-seven-zero-six“,找零钱
- 数组记录状态信息
- 大整数存储与运算
- 标记量妙用
优化算法的数学模型
n次二项式各项的系数 ---------> 杨辉三角的应用
数组中n个数据向后移k位 ---------> 最大公约数的应用
爬楼梯,每次上一阶或者二阶 ---------> 斐波那契数列