算法设计与分析实验报告贪心算法背包问题.docx
- 文档编号:10372004
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:13
- 大小:55.84KB
算法设计与分析实验报告贪心算法背包问题.docx
《算法设计与分析实验报告贪心算法背包问题.docx》由会员分享,可在线阅读,更多相关《算法设计与分析实验报告贪心算法背包问题.docx(13页珍藏版)》请在冰豆网上搜索。
算法设计与分析实验报告贪心算法背包问题
算法设计与分析实验报告
题目:
贪心算法背包问题
专业:
JAVA技术02班
学号:
00201
姓名:
XXX
指导老师:
XXX
实验三:
贪心算法背包问题
一、实验目的与要求
1、掌握背包问题的算法
2、初步掌握贪心算法
二、实验题:
问题描述:
与0-1背包问题相似,给定n种物品和一个背包。
物品i的重量是wi,其价值为vi,背包的容量为c。
与0-1背包问题不同的是,在选择物品i装入背包时,背包问题的解决可以选择物品i的一部分,而不一定要全部装入背包,1
三、实验代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclasserextendsJFrame{
privatestaticfinallongserialVersionUID=-1508220487443708466L;
privatestaticfinalintwidth=360;//面板的宽度
privatestaticfinalintheight=300;//面板的高度
publicintM;
publicint[]w;
publicint[]p;
publicintlength;
er(){
//初始Frame参数设置
this.setTitle("贪心算法");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(width,height);
Containerc=getContentPane();
c.setLayout(newBoxLayout(c,BoxLayout.Y_AXIS));
setLocation(350,150);
//声明一些字体样式
FonttopF1=newFont("宋体",Font.BOLD,28);
Fontblack15=newFont("宋体",Font.PLAIN,20);
Fontbold10=newFont("宋体",Font.BOLD,15);
//声明工具栏及属性设置
JPanelbarPanel=newJPanel();
JMenuBartopBar=newJMenuBar();
topBar.setLocation(1,1);
barPanel.add(topBar);
//面板1和顶部标签属性设置
JPanelp1=newJPanel();
JLabeltopLabel=newJLabel("背包问题");
topLabel.setForeground(Color.blue);
topLabel.setFont(topF1);
p1.add(topLabel);
//中间面板和标签及输入框属性设置
JPanelp2=newJPanel();
p2.setLayout(newBoxLayout(p2,BoxLayout.Y_AXIS));
JLabelwLabel=newJLabel("请输入重量:
");
JLabelpLabel=newJLabel("请输入效益:
");
wLabel.setFont(black15);
pLabel.setFont(black15);
//
finalJTextFieldwText=newJTextField(8);
finalJTextFieldpText=newJTextField(8);
//wText.setText("10,8,7,5,9,6");
//pText.setText("15,14,7,10,17,7");
p2.add(wLabel);
p2.add(wText);
p2.add(pLabel);
p2.add(pText);
//
//中下部面板和标签属性设置
JPanelp3=newJPanel();
JLabelbottomLabel=newJLabel(
"注意:
数据输入时请添加分割符','");
bottomLabel.setFont(bold10);
bottomLabel.setForeground(Color.red);
bottomLabel.setHorizontalAlignment(SwingConstants.RIGHT);
p3.add(bottomLabel);
//
JPanelp5=newJPanel();
p5.setLayout(newBoxLayout(p5,BoxLayout.Y_AXIS));
JLabelmLabel=newJLabel("请输入背包总重量:
");
mLabel.setFont(black15);
finalJTextFieldmText=newJTextField(8);
p5.add(mLabel);
p5.add(mText);
//面板和按钮的设置
JPanelp4=newJPanel();
JButtonsubmit=newJButton("确定");
submit.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Strings1=pText.getText();//效益
Strings2=wText.getText();//重量
Strings3=mText.getText();//背包
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
Strings1Copy,s2Copy,s3Copy;
s1Copy=s1;
s2Copy=s2;
s3Copy=s3;
s1Copy=s1Copy.replaceAll(",","");
s2Copy=s2Copy.replaceAll(",","");
s3Copy=s3Copy.replaceAll(",","");
System.out.println(s1Copy);
System.out.println(s2Copy);
System.out.println(s3Copy);
try{
String[]temp=s1.split(",");//按照','分割字符串
p=newint[temp.length];
for(inti=0;i p[i]=Integer.parseInt(temp[i]);// temp=s2.split(","); w=newint[temp.length]; for(inti=0;i if(w.length==p.length) { length=w.length; } else{ JOptionPane.showMessageDialog(null,"长度不等,请检查后重新输入! "); } M=Integer.parseInt(s3); }catch(NumberFormatExceptione2){ e2.printStackTrace(); try{ if(s2.equals("")){ JOptionPane.showMessageDialog(null,"重量不能为空! "); return; } else{ if(s1.equals("")){ JOptionPane.showMessageDialog(null,"效益值不能为空! "); return; }else { if(s3.equals("")) JOptionPane.showMessageDialog(null,"总重量不能为空! "); return; } } }catch(Exceptione3){ //TODO: handleexception } } //可以执行贪心算法了 int[]wCopy=newint[w.length]; int[]pCopy=newint[w.length]; floattemp2; inttemp1; floattotalx=0; float[]x=newfloat[w.length];//效益和重量的比值 float[]n=newfloat[w.length];//记录个数 float[]nCopy=newfloat[w.length]; for(inti=0;i { wCopy[i]=w[i]; pCopy[i]=p[i]; } for(inti=0;i x[i]=(float)((p[i]*1.0)/w[i]); for(inti=0;i for(intj=i+1;j { if(x[i] { temp2=x[j]; x[j]=x[i]; x[i]=temp2; temp1=p[j]; p[j]=p[i]; p[i]=temp1; temp1=w[j]; w[j]=w[i]; w[i]=temp1; } }//效益重量比值排序 Backpackb=newBackpack(M,w,p,n); for(inti=0;i for(intj=0;j { if(wCopy[i]==w[j]&&pCopy[i]==p[j]) { nCopy[i]=b.n[i]; } } for(intj=0;j totalx=totalx+n[j]*p[j]; ShowResults=newShowResult(p,w,length,n,totalx); }//actionPerformed }); p4.add(submit); //p4.add(eButton); // JPaneltopPanel=newJPanel(); topPanel.setLayout(newBoxLayout(topPanel,BoxLayout.Y_AXIS)); topPanel.add(p1); topPanel.add(p2); topPanel.add(p5); topPanel.add(p3); topPanel.add(p4); c.add(barPanel); c.add(topPanel); setVisible(true); }//构造方法 publicstaticvoidmain(String[]args){ erg=newer(); }//endmain } classBackpack{ privateintcapacity; intlength;//数组元素个数 float[]n; publicBackpack(intM,int[]w,int[]p,float[]n){ this.capacity=M; this.length=w.length; this.n=n; inti; for(i=0;i { if(w[i]>capacity)break; else{ n[i]=1; capacity=capacity-w[i]; } }//endfor if(i n[i]=(float)((capacity*1.0)/w[i]); }//构造方法 } classShowResultextendsJFrame{ privatestaticfinallongserialVersionUID=6592095135353992914L; ShowResult(int[]p,int[]w,intlength,float[]n,floattotalx){ setDefaultCloseOperation(DISPOSE_ON_CLOSE); Containerc=getContentPane(); c.setLayout(newBoxLayout(c,BoxLayout.Y_AXIS)); setSize(360,300); setLocation(400,200); setTitle("最后结果"); java.text.DecimalFormatdf=newjava.text.DecimalFormat("#.##"); Stringps=null; Stringws=null; Stringns=null; ps=Integer.toString(p[0])+","; ws=Integer.toString(w[0])+","; ns=Float.toString(n[0])+"个,"; //格式化小数部分 for(intj=0;j { n[j]=Float.parseFloat(df.format(n[j])); } for(inti=1;i { ps=ps+Integer.toString(p[i])+","; ws=ws+Integer.toString(w[i])+","; ns=ns+Float.toString(n[i])+"个,"; } JPanelp1=newJPanel(); p1.setLayout(newBoxLayout(p1,BoxLayout.Y_AXIS)); JLabelwLabel=newJLabel("重量值分别是: "); JLabelpLabel=newJLabel("效益值分别是: "); JLabelnLabel=newJLabel("个数分别是: "); JLabeltLabel=newJLabel("总效益是: "); JTextFieldpt=newJTextField(8); pt.setText(ps); pt.setEditable(false); JTextFieldwt=newJTextField(8); wt.setEditable(false); wt.setText(ws); JTextFieldnt=newJTextField(8); nt.setEditable(false); nt.setText(ns); JTextFieldtt=newJTextField(8); tt.setEditable(false); tt.setText(Float.toString(totalx)); p1.add(pLabel); p1.add(pt); p1.add(wLabel); p1.add(wt); p1.add(nLabel); p1.add(nt); p1.add(tLabel); p1.add(tt); c.add(p1); setVisible(true); } } 四、实验结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 实验 报告 贪心 背包 问题