/*
* @param {Object} capacity 背包容量 6
* @param {Object} weights 物品重量 [2,3,4]
* @param {Object} values 物品价值 [3,4,5]
*/
//贪心算法,只能算,可以分割的物品,如果不能分割物品,只能得到近似解,不分割物品,可以使用动态规划
//1、计算每件商品的(价格/质量),即单位质量的价值
//2、将单位质量价值排序
//3、逐个取出
console.log(tanx(6,[2,3,4],[3,4,5]));
function tanx(capacity,weights,values){
var list = [];
for(var i = 0,len = weights.length; i < len; i++){
list.push({
num:i+1, //第几件商品
w:weights[i], //重量
v:values[i],
rate:values[i]/weights[i]
});
}
list.sort(function(a,b){
if(a.rate > b.rate){
return -1;
}else{
return 1;
}
});
var selects = [];
var total = 0;
for(var i = 0,len = list.length; i < len; i++){
var item = list[i];
if(item['w'] <= capacity){
selects.push({
num:item.num,
rate:1 , //完整的商品记录为1
v:item.v,
w:item.w
});
total = total + item.v;
capacity = capacity - item.w;
}else if(capacity > 0){
//选取不完整的商品
var rate = capacity/item['w'];
var v = item.v*rate;
selects.push({
num:item.num,
rate: rate,
v:item.v*rate,
w:item.w*rate
});
total = total + v;
break;
}else{
break;
}
}
return {
selects,
total
}
}