这是之前期末考试复习做的,但是由于时间紧张,未能做全,想删除又觉得可惜,所以还是先发表出来吧。害~很是遗憾,等有时间有机会将会重新补全
什么是算法?
算法: 算法是解决问题的方法或过程,它包括一系列步骤,用来将输入数据转换成输出结果。
算法描述的形式: 自然语言,流程图,伪代码
用伪代码描述有哪些优势?
答:易于转化代码,容易修改,简单易懂
算法具有的性质:
输入:至少有一个输出。
输出:有0个或多个输入。
确定性:组成算法的每一条指令清晰,无歧义。
有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。
程序是算法的具体实现,但并不满足算法的所有性质。
算法优劣评判标准: 时间复杂度,空间复杂度。
主定理:
递归
递归的要素:递归结束的条件,递归表达式。
递归函数: 递归函数是指在一个函数体中出现直接或者间接调用该函数自身的函数
比较常见的递归的应用像斐波拉契数列,比较难一点的像汉罗塔问题等等,大家可以去感受一下,在这里不多介绍,用来总结和概括知识点
递归的优点:容易用数学归纳法来证明算法的正确性,可读性强,结构清晰。
但是递归会比较慢,比循坏更慢
分治法
分治法解决问题的特点:最优子结构,子问题相互独立,该问题缩小到一定程度可以容易解决,分解的子问题的解可以合并为原问题的解。
二分法
快速排序
快速排序:快速排序是对冒泡排序算法的一种改进。
时间复杂度:
最坏情况下:O(n^2)
平均情况下:O(nlogn)
最好情况下:O(nlogn)
动态规划
动态规划求解问题的性质:最优子结构,重叠子问题
备忘录法:备忘录法为每个解过的子问题建立备忘录以备需要查看,又称查表法,可以避免相同子问题的重复求解,他的结构与直接使用的递归方法的控制结构相同
贪心
贪心求解问题的特点:最优子结构,贪心选择性质。
贪心可求解问题:最优装载问题,部分背包问题,最小生成树问题,活动安排问题,单源最短路径问题…。
Dijkstra算法
可解决的问题:单终点最短路径问题,每对顶点最短路径问题,单源最短路径问题,单对顶点最短路径问题…。
回溯法
回溯法:回溯法采用的搜索策略是深度优先搜索,它可以解决问题的所有解,问题的最优解,问题的任一解。
回溯法剪枝函数:限界函数,约束函数
限界函数:用来剪去得不到更优解的右子树(不装该物品)
约束函数:剪去不合理的左子树(装该物品)
应用:马的遍历:它是否有可行解与棋盘大小,马的初始位置有关。
问题集锦
1.一只青蛙一次可以跳上1级台阶,也可以跳上2级,那么跳上第6级台阶有几种跳法?
答:这是一个斐波那契数列,1,2,3,5,8,13…所以第6级台阶有13种跳法,
2.8个圆盘的汉诺塔至少需要移动多少步才能全部移完?
答:需要256步,计算公式为2^n-1
3.递归应用场景有哪些?
答:问题的定义是递归的,采用的数据结构是递归的,求解方式是递归的
4.一只青蛙一次可以跳上1级台阶,2级台阶,也可以跳上n级,那么跳上第6级台阶有几种跳法?
答:这是32种=2^(n-1)
5.整数6有多少种划分?
答:是11种。
6.一个小孩正在上楼梯,楼梯有n阶台阶,小孩子可以上1阶,2阶,3阶,那么当n=5时共有多少种上楼梯的台阶?
答:11种