算法分析与设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计与分析实验报告
班级:计科0902班
姓名:张华敏
学号:0909090814
矩阵连乘问题
一,实验内容:
二,写一个完整的代码来完整的实现矩阵连乘问题。
三,算法设计:
在矩阵连乘问题中,根据老师所讲和自己看书对动态规划方法的理解,通过最优子结构性质。再结合书上的算法,便可顺利的写出了代码
四,遇到的问题及解决方案:
只根据算法写出具体的实现过程刚开始觉得很难,觉得无从下手,不知道该用什么结构形式来存放各个参数,也不知道该怎样具体的实施算法的细节,但是课本上给出了一段实现代码给了我很大的启发,通过借鉴树上的代码实现再结合自己的努力,才终于完成了矩阵连乘全部的代码实现,包括最少连乘次数以及剖分方法。
五,源代码
package suanfa;
public class Juzhen {
public void matrixchain(int p[],int m[][],int s[][]){
i nt n=p.length-1;
f or(int i=1;i<=n;i++){
m[i][i]=0;
}
f or(int r=2;r<=n;r++){
for(int i=1;i<=n-r+1;i++){
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(int k=i+1;k int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]; if(t m[i][j]=t; s[i][j]=k; } } } }} public static void main(String[] args) { int p[]={50,10,40,30,5}; int m[][]=new int[5][5]; int s[][]=new int[5][5]; Juzhen a=new Juzhen(); a.matrixchain(p,m, s); //a.traceback(s,1,4); System.out.println("最少数乘次数:"+m[1][4]); } } 五,测试结果: 背包问题 一,实验内容: 二,写一个完整的代码来完整的实现背包问题。 三,算法设计: 贪心算法,首先算出每个货物单位重量的价值,然后进行 排序,往背包里种货物时总是先装单位重量价值最大的货 物,这样便可得到最优解。 四,遇到的问题及解决方案: 种种方法很简单,没有遇见什么问题。 五,源代码 package suanfa; public class Beibao { static float w[]=new float[]{5,1,3,4,5}; static float p[]=new float[]{4,5,3,2,1}; static float capacity=12; static float value=0; public static void sort(){ float x; for(int i=0;i<5;i++){ for(int j=i+1;j<5;j++){ if((p[i]/w[i])<(p[j]/w[j])){ x=w[i]; w[i]=w[j]; w[j]=x; x=p[i]; p[i]=p[j]; p[j]=x; } } } } public static void main(String[] args) { sort(); for(int i=0;i<5;i++){ if((capacity!=0)&&(w[i]<=capacity)){ value=value+p[i]; } if((capacity!=0)&&(capacity value=value+capacity*p[i]/w[i]; } capacity=capacity-w[i]; } System.out.println(value); } } 五,测试结果: 最大数最小数 一,实验内容: 二,写一个完整的代码来完整的实现最大数最小数问题。 三,算法设计: 利用分治思想,先将数列分成两组,在每一组中分别求最 大数最小数,然后从这两组最大数最小数中选出最大的和 最小的,分组后的做法也像上面一样在分成两组,直到把 组分成只含两个数。 四,遇到的问题及解决方案: 种种方法很简单,没有遇见什么问题。 五,源代码 package suanfa; //import java.util.Scanner; public class Maxmin { static int n; static int a[]=new int[]{1,24,3,9,5}; static int fmax,fmin; public static int max(int i,int j){ int x; int y; int mid;