算法分析与设计实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档