算法实验报告(2)

2019-05-26 18:18

算法设计与分析实验报告

四、实验过程设计(算法设计过程)

(1)用数组b[0:n-1]记录以a[i],0<=i

max{b[k]}?1 据此将计算b[i]长度。序列a的最长递增子序列的长度为0?k?ia[k]?a[i]转化为i个规模更小的子问题。

(2)转化成一般背包问题即可,具体算法过程与背包问题大同小异 五、实验结果分析

(2)六、实验体会

时间复杂度为O(nb)

学会了用动态规划的想法来解决背包问题,为了给出合适的测试数据也是捣鼓了好久,让我知道算法思想重要,他的测试和实现也很重要,这次课题的限制降低很多让我们有更多的思考空间,提升了想象力。 七、附录:(源代码)

(1)int pia() { }

int maxL(int n)

2015-2016学年 第一学期

int i,j,k;

for(i=1,b[0];i

return maxL(n);

for(j=0,k=0;j

b[i]=k-1;

算法设计与分析实验报告

{ }

(2)import java.util.Scanner; public class beibao{

static void knapsack(int n,float c,float[] v,float[]w,float []x) {

Sort(n,v,w); int i;

for(i=1;i<=n;i++) x[i]=0; for(i=1;i<=n;i++) { if(w[i]>c)

break; x[i]=1; c-=w[i]; } if(i<=n)

x[i]=c/w[i]; }

int i,j;

for(i=0;i

Scanner scan =new Scanner(System.in); System.out.println(\输背包中物品的个数:\); int n=scan.nextInt();

System.out.println(\输入背包的容量:\); float c=scan.nextFloat(); float [] v=new float[n+1];

for(int i=0,temp=0;itemp)temp=b[i]; return temp;

static void Sort(int n, float[] v, float[] w) {

if(v[i]/w[i]

public static void main(String[] args) {

float [] w=new float[n+1]; float [] x=new float[n+1]; for(int i=1;i<=n;i++) {

System.out.println(\输入第\+i+\的重量\); w[i]=scan.nextFloat();

System.out.println(\输入第\+i+\的价值\); v[i]=scan.nextFloat();

2015-2016学年 第一学期

算法设计与分析实验报告

}

knapsack(n,c,v,w,x);

System.out.println(\一般背包问题的解为:\); for(int i=1;i<=n;i++)

System.out.print(x[i]+\); } }

实验三 贪心算法

一、实验目的

1.加深学生对动态规划算法设计方法的基本思想、基本步骤、基本方法的理解与掌握; 2.提高学生利用课堂所学知识解决实际问题的能力; 3.提高学生综合应用所学知识解决实际问题的能力。

二、实验内容

1、单源最短路径

2、一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,之处应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。

三、实验要求

(1)用贪心算法思想求解最优问题;

(2)再选择自己熟悉的程序设计语言实现所有算法; (3)分析所设计的算法的时间/空间复杂性。

四、实验过程设计(算法设计过程)

1、设置顶点几何S并不断地做贪心选择来扩充这个集合一个顶点属于s当且仅当源到该顶点的最短路径长度已知,u为g中某个顶点,把从源到u且中间只经过s中顶点的路径称为从源到u的特殊路径,并用dist记录当前每个顶点所对应的最短特殊路径长度。一旦s包含了所有v的点,dist就记录了从源到所有其他顶点之间的最短路径长度。 2、设加油次数为k,每个加油站间距离为a[i];i=0,1,2,3……n 1.始点到终点的距离小于N,则加油次数k=0; 2.始点到终点的距离大于N,

① 加油站间的距离相等,即a[i]=a[j]=L=N,则加油次数最少k=n; ② 加油站间的距离相等,即a[i]=a[j]=L>N,则不可能到达终点;

③ 加油站间的距离相等,即a[i]=a[j]=L

④ 加油站间的距离不相等,即a[i]!=a[j],则加油次数k通过下面的算法求解。

五、实验结果分析

2015-2016学年 第一学期

算法设计与分析实验报告

(1)

时间复杂度为O(n)

2(2)时间复杂度为O(n)

六、实验体会

通过这次实验让我感受到独立思考写算法的乐趣,尤其是加油站问题,其中遇到很多困难,但是在和同学们的讨论下,我茅塞顿开,感受到了贪心算法是如何进行他的贪心行为,大大提升了我的编程能力和对贪心算法的理解。 七、附录:(源代码)

(1)public class Dijkstra { static int MAX_SIZE=6;

public static void dijkstra(int v,float[][]a,float[]dist,int[]prev){ int n=dist.length-1; if(v<1||v>n)return;

boolean []s=new boolean[n+1];

for(int i=1;i<=n;i++) { dist[i]=a[v][i]; s[i]=false;

if(dist[i]==Float.MAX_VALUE) prev[i]=0; else prev[i]=v; } dist[v]=0;s[v]=true; for(int i=1;i

for(int j=1;j<=n;j++)

2015-2016学年 第一学期

算法设计与分析实验报告

if((!s[j])&&(dist[j]

temp=dist[j]; } s[u]=true;

for(int j=1;j<=n;j++)

if((!s[j])&&(a[u][j]

public static void main(String args[]){ float a[][]=new float[MAX_SIZE][MAX_SIZE]; float[]dist=new float[MAX_SIZE]; int []prev=new int[MAX_SIZE]; for(int i=0;i<6;i++) for(int j=0;j<6;j++) a[i][j]=Float.MAX_VALUE; a[1][2]=10;

a[1][4]=30;a[1][5]=100;

a[2][3]=50; a[3][5]=10; a[4][3]=20; a[4][5]=60;

int v=1;//假设从顶点1处出发 dijkstra(v,a,dist,prev); System.out.println(\从1出发到2、3、4、5的最短路径依次是:\

for(int j=2;j<6;j++){ System.out.println(dist[j]); } int z=prev[5],y=prev[z],x=prev[y];

System.out.println(\从1到5最短路径经过的点为:\ System.out.print(x+\ (2)public class qiyou {

public static void greedy(int []v,int n,int N){

//定义每个加油站的距离存进数组v,定义加满油可以开n公里 //定义要跑N公里 int s=v.length;

int k=0; //初始化经过加油站的数量k int load=0;//初始化走过的长度 if(N

System.out.println(\不需要加油\ }

for(int i=0;in) {

System.out.println(\还没到加油站就没油了!\ } }

for(int i=0;i

2015-2016学年 第一学期


算法实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:毕业设计指导(论文)指导记录

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: