问题 - 下面的算法循环遍历一个对象数组,并将对象分配到三个子集中,使每个子集的总和非常接近(贪心算法)。如果运行代码,你会发现在第一个子集中p:11出现了两次,在第三个子集中p:10出现了两次。我不想让p的值在同一个数组中出现超过一次。
问题 - 在该算法中,如何确保p的值在将对象分配到子集数组时不会在同一个子集数组中出现超过一次,同时确保每个子集数组的总和仍然相等?
问题 - 在该算法中,如何确保p的值在将对象分配到子集数组时不会在同一个子集数组中出现超过一次,同时确保每个子集数组的总和仍然相等?
let list = [
{p:2, size:50},{p:4, size:50},{p:5,size:25},
{p:6, size:167},{p:6, size:167},{p:7, size:50},
{p:8, size:25},{p:8, size:50},{p:10, size:75},
{p:10, size:75},{p:11, size:25},{p:11, size:50},
{p:12, size:25},{p:13, size:50},{p:14,size:25}
]
function balance_load(power_load_array, number_of_phases) {
const sorted = power_load_array.sort((a, b) => b.size - a.size); // sort descending
const output = [...Array(number_of_phases)].map((x) => {
return {
sum: 0,
elements: [],
};
});
for (const item of sorted) {
const chosen_subset = output.sort((a, b) => a.sum - b.sum)[0];
chosen_subset.elements.push({p:item.p, size:item.size});
chosen_subset.sum += item.size;
}
return output
}
let p = balance_load(list,3)
console.log(p)
p
值都是正整数吗? - Redu