算法设计与分析实验报告
- 格式:doc
- 大小:170.50 KB
- 文档页数:21
南京邮电大学
页脚内容1
算法设计与分析
报告
学生姓名
学 号
专业班级
指导教师
完成时间 南京邮电大学
页脚内容2 目录
一、课程内容 ................................................................. 3
二、算法分析 ................................................................. 3
1、分治法 ................................................................ 3
(1)分治法核心思想 .................................................. 3
(2)MaxMin算法分析 ................................................. 3
2、动态规划 .............................................................. 4
(1)动态规划核心思想 ................................................ 4
(2)矩阵连乘算法分析 ................................................ 5
3、贪心法 ................................................................ 5
(1)贪心法核心思想 .................................................. 5
(2)背包问题算法分析 ................................................ 6
(3)装载问题算法分析 ................................................ 6
4、回溯法 ................................................................ 7
(1)回溯法核心思想 .................................................. 7
(2)N皇后问题非递归算法分析 ........................................ 7
(3)N皇后问题递归算法分析 .......................................... 8
三、例子说明 ................................................................. 9
1、MaxMin问题 ........................................................... 9
2、矩阵连乘 .............................................................. 9
3、背包问题 ............................................................. 10
4、最优装载 ............................................................. 10
5、N皇后问题(非递归) ................................................. 11
6、N皇后问题(递归) ................................................... 11
四、心得体会 ................................................................ 11
五、算法对应的例子代码 ...................................................... 12
1、求最大值最小值 ....................................................... 12
2、矩阵连乘问题 ......................................................... 13
3、背包问题 ............................................................. 14
4、装载问题 ............................................................. 17
5、N皇后问题(非递归) ................................................. 18
6、N皇后问题(递归) ................................................... 19
南京邮电大学
页脚内容3 一、课程内容
1、分治法,求最大值最小值,maxmin算法;
2、动态规划,矩阵连乘,求最少连乘次数;
3、贪心法,1)背包问题,2)装载问题;
4、回溯法,N皇后问题的循环结构算法和递归结构算法。
二、算法分析
1、分治法
(1)分治法核心思想
当要求解一个输入规模为n,且n的取值相当大的问题时,直接求解往往是非常困难的。如果问题可以将n个输入分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1
那末,这类问题可以用分治法求解。
分治法的核心技术
1)子问题的划分技术。
2)递归技术。反复使用分治策略将这些子问题分成更小的同类型子问题,直至产生出不用进一步细分就可求解的子问题。
3)合并技术。
(2)MaxMin算法分析
问题:在含有n个不同元素的集合中同时找出它的最大和最小元素。
分治策略设计思想:
将任一实例I=(n,A(1),…,A(n))分成两个实例 如果MAX1和MIN1是I1中的最大和最小元素,MAX2和 MIN2是I2中的最大和最小元素, MAX1和MAX2中的大者就是I中的最大元素MAX, MIN1和MIN2中的小者是I中的最小元素MIN。如果I只包含一个元素,则不需要作任何分割直接就可得到其解。
核心算法如下:
procedure MAXMIN(i,j,fmax,fmin)
global n,A[1:n] 南京邮电大学
页脚内容4 case
{ i=j: fmax←fmin←A[i] /*只有一个元素*/
i=j-1:if A[i]
fmax←A[j ] ;fmin←A[i]
else fmax←A[i] ;fmin←A[j]
else:mid← /*分成两部分*/
MAXMIN(i,mid,max1,min1)
MAXMIN(mid+1,j,max2,min2)
fmax←max(max1,max2)
fmin←min(min1,min2)
}
MAXMIN的时间复杂性分析
用T(n)表示比较次数,则所导出的递归关系式:
2)2/()2/(10)(nTnTnT
当n是2的幂时,即对于某个正整数k,n=2k,有
T(n)=2T(n/2)+2
=2(2T(n/4)+2)+2
=4T(n/4)+4+
=2k-1T(2)+2k-1+……+2
=2k-1+2k-2
=3n/2-2
对于任意 n ,存在整数k,有2k-1
2、动态规划
(1)动态规划核心思想
动态规划法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的。用分治法求解时,有些子问题被重复计算了许多次。
如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。
设计动态规划法的步骤:
1、划分阶段(子问题),分析最优子结构性质。
2、找出阶段间的最优决策的递推关系,写出动态规划方程;
3、设计自底向上计算出最优值的步骤。
4、从最终决策的回溯子问题的决策,构造一个最优解。
南京邮电大学
页脚内容5 (2)矩阵连乘算法分析
问题:给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。
两个矩阵相乘所需做的数乘次数为 l*n*m, 矩阵乘法满足结合律,故矩阵连乘有可以有许多不同的计算顺序。计算顺序由加括号的方式确定,加括号的方式决定了矩阵连乘的计算量。
核心算法如下:
依次计算各层的子问题集
r=1,初始化
for i ← 1 to n do
m[i][i] ← 0
从 r=2至 r=n
for r← 2 to n do
计算所有 大小为r的子问题
MatrixChain(p[0:n], n,m[1:n][1:n],s [1:n][1:n])
{ 1) for i ← 1 to n do //初始化
m[i][i] ← 0
2) for r ← 2 to n do // 子问题由小到大
3) for i ← 1 to n - r+1 do //子问题的起点
4) {j←i+r-1 //子问题的终点
5) m[i][j]←m[i+1][j]+ p[i-1]*p[i]*p[j] // 初值考虑
6) s[i][j] ← i // 记录分割点
7) for k← i+1 to j-1 do //求最好的分割k