最优装载问题实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最优装载问题的贪心算法实现

姓名:

(学号:)

一、作业及实验目的

通过本实验使学生掌握贪心算法基本要素、步骤及其应用

二、作业及实验原理

本实验是应用贪心算法用Java 编程语言对给定轮船的载重量和一批集装箱,在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。最优装载问题的贪心算法见[1] 的p91-92,Java 编程语言见[2]。

三、 作业及实验内容

1. 计算问题及描述:

问题描述:给定轮船的载重量c ,第n 个集装箱及其重量w[n],将尽可能多得集装箱装上轮船。

设第i 个集装箱为i w ,最多可放数量n 个。

问题形式为:1max n i i x

=∑

1

n i i i w x

c =≤∑ x (0,1),1x i n ∈≤≤

2. 算法设计及描述:

验证问题是否符合贪心算法:

(1)该问题具备贪心选择性质:c 为定值时,i w 越小时,可装载的集装箱数量n 越大。问题划分为m 个子问题,只要依次选择最小重量集装箱,满足小于等于c 。原问题即可由n 个子问题的最优解得到整体的最优解。则最优装在问题具有贪心选择性质。

()1122n n m m y max x w x w x w x w =++⋯++⋯+ 先排序整个集装箱,然后尽可能多地选出前n 个集装箱,要求()1122n n m m y max x w x w x w x w c.=++⋯++⋯+≤ 输出所选集装箱编号。

(2) 该问题具备最优子结构性质:一个问题的最优解包含其子问题的最优解,所以,最优装载问题具有最优子结构性质。

(3) 由于最优装载问题的贪心选择性质和最优子结构性质,最优装载问题符合贪心算法。

3. 算法分析:给出具体的算法复杂度—算法运行时间的渐近表示 排序的时间复杂度为()O

nlogn , for 循环的时间复杂度为()o n ;所以空间

复杂度为O(m)。

4. 程序设计:根据所设计的算法,写出完整的算法Java 程序或 其他语言程序,并给出相应的程序运行结果

算法的程序实现:

#include"stdafx.h"

void outputResult(int *r,int len){

printf("结果:");

for(int i=0;i

{

printf("%d\t",r[i])

}

printf("\n");

}

void sortBox(int *box,int n){

for(int i=n-1;i>0;i--)

{

for(int j=0;j

if(box[j]>box[j+1]){

int temp=boa[j];

box[j]=box[j+1];

box[j+1]=temp;

}

}

}

}

void loading(int *box,int *r,int w,int n){

r[0]=1;

w=box[0];

for(int i=1;i

if(w-box[i]>=0){

w-=box[i];

r[i]=1;

}

}

}

int_tmain(int argc,_TCHAR*argv[])

{

int w=100;

int box[6]={100,20,25,25,20,20};

sortBox(box,6);

int result[6]={0};

loading(box,result,w,6);

outputResult(result,6);

getchar();

return 0;

}

5.实验总结:写出本次作业及实验心得

通过本次实验,我们加深领会了贪心算法的中心思想,实验过程中,需要运用了最优子结构性质,贪心选择性质等等,通过对这些知识点得运用,我们更加深层次的了解贪心算法的精髓。。

参考文献

[1] 王晓东编. 算法设计与分析(第3版). 清华大学出版社. 2016.

[2] 吴仁群编. Java基础教程. 清华大学出版社. 2009.

相关文档
最新文档