贪心算法的特点:就是按照最优解解决实际问题贪心算法在每一步的选择中,都选择当时最佳的情况。即局部最优的选择。贪心算法并不能保证总能得到最优解,但是很多问题确实可以求得最优解
心得:本次实验自己亲自通过java编写,因暑假过后,很多知识点都忘了,比如这里用的comparable接口
,进行对象的自定义排序的时候,不知道 返回的-1,0,1 返回时候的状态是大还是小,Comparator接口时候出现很多错误,于是复习了comparable接口的实现和运用,
1.0
在分配对象数组空间的时候出现空指针异常,发现在34行,一直对这个输入输出,和对象的赋值更改,但是却忘了,对象数组分配的时候没有把空间分配给对象,导致对象数组出现空指针异常,无法对对象空间进行内存的分配
-
2.0
给对象数组分配了内存,并且分配了动态的对象数组,这样内存不会多于的分配
-
3.0
在对背包空间分配时,忘记了对else语句break,这样会出现在对第五组数据分配后,背包满了后,还继续分配背包空间,导致数据又多了一组,就是出错的一组
-
4.0
实际问题中还有很多Exception,没有一一截图保存,主要就是排序重写comparable接口的问题,因为这个如果写不好,那么后面计算一定会出错
-
5.0
实验和结果截图
6.0
package cn.nyist;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class BeiBao01 {
int n;//物品数量
double m;//承载力
static double sum; //已经承载jiazhi
public static void main(String[] args) {
System.out.println("请输入宝贝数量");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Info info[] = new Info[n];
for(int i=0; i<n; i++) {
info[i] = new Info();
}
System.out.println("请输入承载力");
double m = scanner.nextInt();
System.out.println(m);
// System.out.println("总共物品数量");
// int mn = scanner.nextInt();
for(int i=0; i<n;i++) {
System.out.println("请输入"+(i+1)+"单物体的重量,价值");
info[i].weight =scanner.nextDouble();
info[i].value = scanner.nextDouble();
info[i].xingJia =info[i].value/info[i].weight;
}
Arrays.sort(info);
System.out.println(info);
System.out.println(Arrays.toString(info));
for(int i=0; i<n; i++) {
if(info[i].weight<m) {
m = m-info[i].weight; //剩余的空间
sum += info[i].value; //已经有的价值和
System.out.println(sum+"aaa");
}
// if(info[i].weight>m) {
else {
sum += m*info[i].xingJia;
System.out.println(sum+"bbb");
break;
}
}
System.out.println("总价值"+sum);
}
}
class Info implements Comparable{
double weight;//单个物体的重量
double value;//单物价值
double xingJia;//性价比
@Override
public String toString() {
return "Info [weight=" + weight + ", value=" + value + ", xingJia=" + xingJia + "]";
}
public Info() {
super();
// TODO Auto-generated constructor stub
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
public double getXingJia() {
return xingJia;
}
public void setXingJia(double xingJia) {
this.xingJia = xingJia;
}
// @Override
// public int compareTo(Info o) {
// int a =(int) (o.xingJia-this.xingJia);
// return a;
// }
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
if (o instanceof Info) {
Info s = (Info) o;
if (this.xingJia > s.xingJia) {
return -1;
} else if (this.xingJia == s.xingJia) {
return 0;
} else {
return 1;
}
}
return 0;
}}