算法分析与设计技术方案实验研究报告.docVIP

  • 5
  • 0
  • 约6.95千字
  • 约 11页
  • 2019-05-06 发布于江苏
  • 举报

算法分析与设计技术方案实验研究报告.doc

算法分析与设计技术方案实验研究报告

PAGE PAGE 6 工程序号 1 工程名称 分治法实验 成绩 小标题 找最大值和最小值 方法思想 分治法是把规模大的问题,分割成n个形式相同规模一定或不可再分的子问题,递归地解决每个子问题,再把子问题的结果汇总,合并得到原问题的解。 分治法在每一层递归上由三个步骤组成: (1) 划分(divide):将原问题分解为若干规模较小、相互独立、与原问题形式相同的子问题。 (2) 解决(conquer):若子问题规模较小,则直接求解;否则递归求解各子问题。 (3) 合并(combine):将各子问题的解合并为原问题的解。 2、问题描述 我们将分治策略用于此问题,每次将问题分成大致相等的两部分,分别在这两部分中找出最大值与最小值,再将这两个子问题的解组合成原问题的解,就可得到该问题的分治算法。 3、算法描述 REC-MAXMIN(i,j,fmax,fmin) 1 if i=j 2 then fmax ← fmin ← A[i] 3 ifi=(j-1) 4 then ifA[i]A[j] 5 then fmax← A[i] 6 fmin←A[j] elsefmax ←A[j] 8 fmin←A[i] 9 elsemid ←[(i+j)/2] 10 REC-MAXMIN(i,mid,gmax,gmin) 11 REC-MAXMIN(mid+1,j,hmax,hmin) 12 fmax← max{gmax,hmax} 13 fmin←min{gmin,hmin} 4、程序清单 #includeiostream.h void FZFa(int i,int j,int max,int min,int a[]) { if(i==j) { max=a[i]。 min=a[j]。 } else if(i==(j-1)) { if(a[i]a[j]) { max=a[i]。 min=a[j]。 } else { max=a[j]。 min=a[i]。 } } else { int midd=(i+j)/2。 int max1=0,min1=0,max2=0,min2=0。 FZFa(i,midd,max1,min1,a)。 FZFa(midd+1,j,max2,min2,a)。 if(max1max2) max=max1。 else max=max2。 if(min1min2) min=min1。 else min=min2。 } } int main() { int t[]={2,4}。 int max,min。 FZFa(0,1,max,min,t)。 cout最大值:maxendl。 cout最小值:minendl。 return 0。 } 5、实验结果(可用文字描述和贴图等方式表现实验结果) 工程序号 2 工程名称 动态规划法实验 成绩 小标题 最长公共子序列 1、方法思想 动态规划算法与分治法类似,其基本思想也是将待求解问题分成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适用于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。在分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而再需要时再找出已求的答案,就可以避免大量重复计算,从而得到多项式时间算法。为了达到这个目的,可以用一个表来记录所有已解决的子问题的答案。不过孩子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划的基本思想。 2、问题描述 最长公共子序列为题:给定两个序列X={x1,x2,x3……xm}和Y={y1,y2,y3……yn},找出X和Y的最长公共子序列。 3、算法描述 LCSLENGTH(X, Y) 1 m← length[X] 2 n← length[Y] 3 fori← 1 to m 4 do l[i, 0]← 0 5 forj← 1 ton 6 dol[0, j]← 0

文档评论(0)

1亿VIP精品文档

相关文档