算法设计与分析期末复习
算法设计与分析
第一章 绪论
第一章重点的内容是递归问题和一些简单的算法题。
n!问题
示例Python代码:
python
1 | def fac(num): |
自写C++代码
c++
1 |
|
全排列问题
示例Python代码
python
1 | def all_permutation(array,start): |
自写c++代码
c++
1 |
|
斐波那契数列
示例Python代码
python
1 | def Fibonacci(n): |
自写c++代码
c++
1 |
|
汉诺塔问题
python
1 | def hanoi(n,a,b,c):#n为圆盘数,a代表初始位圆柱,b代表过渡位圆柱,c代表目标位圆柱 |
杨辉三角问题
python
1 | def yang(i,j): |
N个连续自然数的连加和问题
python
1 | #依次累加求和 |
调度问题
有n个客户带来n项任务,每项加工时间已知,设为ti(i=1,2,…,n)。从0时刻开始,陆续安排到一台机器上加工。每个任务的完成时间是从0时刻到该任务加工完成的时间。为了使尽可能多的客户满意,我们希望找到总等待时间最少的调度方案,即:总完成时间最短。
python
1 | # 将n项任务的加工时间由小到大排序得到的次序为最优调度次序 |
参考C++代码
c++
1 |
|
最大值问题
python
1 | def arrayMax(a): |
在序列A中查找元素K
python
1 | def find(a,K): |
检查序列A和B是否存在公共元素
python
1 | def check_common(a_list,b_list): |
第二章 贪心算法
贪心算法本质就是从眼前某一个初始解出发,在每一阶段都做出当前最优的决策,即贪心策略,逐步逼近给定的目标,尽可能快地求得更好的解。贪心算法可以理解为以逐步的局部最优,达到最终的全局最优的方法。
活动安排问题
c++
1 | void GreedySelector(int n, Type s[],type f[],bool A[]){ |
最优装载问题
c++
1 | void Loading(int x[],Type w[],Type c,int n){ |
单源最短路径问题
dijkstra
python
1 | #线性时间找最小 |
哈夫曼编码
python
1 | ''' |
最小生成树
Prim算法
每次循环选择一个合适的顶点
时间复杂度 O(n^2)
Kruskal算法
每次循环选择一条合适的边
时间复杂度 O(nlogn)
第三章 分治算法
大整数乘法
python
1 | #通用的两个大整数乘法分治算法 |
求最小值
python
1 | def n_min(a_list,low,high): |
棋盘覆盖问题
python
1 | def chess(tr,tc,pr,pc,size):#tr,tc:棋盘左上角的位置,即棋盘位置。pr,pc:特殊方格的位置,size为棋盘大小。 |
幂乘问题
python
1 | def power(a,n): |
二分查找
c++
1 |
|
选第二大元素
python
1 | def find_max(a_list,left,right): |
c++
1 |
|
循环赛日程表
python
1 | #非递归算法 |
c++
1 |
|
归并排序
c++
1 |
|
快速排序
c++
1 |
|
找第K小问题
c++
1 |
|
第四章 动态规划
常用场景:
- 主要用于求解以实践划分阶段的动态过程的优化问题
- 动态规划算法用于求解具有某种最优性质的问题
动态规划基本思想
经分解得到的各个子问题往往不是相互独立的
在求解过程中,将已解决的子问题的最优值进行保存,在需要时可以轻松取出
动态规划基本要素
最优子结构性质
子问题重叠性质
自底向上的求解方法
矩阵连乘问题
c++
1 |
|
凸多边形最优三角划分
c++
1 |
|
最长公共子序列问题
c++
1 |
|
加工顺序问题
c++
1 |
|
0-1背包问题
c++
1 |
|
第五章 深度优先搜索
N皇后问题
c++
1 |
|
0-1背包问题——子集树
c++
1 |
|
最大团问题——子集树
c++
1 |
|
批处理作业调度问题——排列树
c++
1 |
|
旅行商问题——排列树
c++
1 |
|
图的m着色问题——满m叉树
c++
1 |
|
最小质量机器设计问题——满m叉树
c++
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 fancy沐生!