我有一个权重列表,其中每个索引表示一个物品的权重。
Weights = [0.3, 0.7, 0.1, 0.3, 0.1, ...]
每个项目都有一系列碰撞项目,因此如果您选择项目0,则无法选择项目1。
Item_0 = [0,1,3,7]
Item_1 = [1,5,6,8]
所有物品发生的碰撞次数相同。
目标是选择N个物品,考虑到碰撞并最大化所选物品的重量。
如何以最简单和最符合Python风格的方式实现?
我最初认为贪心算法可以解决问题(按重量降序排序),但它不起作用,我能想到的唯一其他解决方案是找到所有可能的N个物品组合(没有碰撞)并计算总重量。
贪心算法(给出错误结果):
def pickTop_K(weights, collision_dict):
ret = []
while len(ret) < k:
index = np.argmax(probs)
ret.append(index)
collisions = collision_dict[index]
weights[collisions] = 0
if np.max(weights) == 0:
break
return ret
Weights
的索引吗?所以第0项-> 0.3,第1项-> 0.7等。 - RoadRunner