【发布时间】:2021-08-25 06:03:08
【问题描述】:
我有一个数据框:
id col1 col2
0 1000 250
1 2000 750
2 1500 350
3 3000 800
4 4500 2500
5 8500 4450
6 6300 1250
我试图找到可以最大化 col2 值总和的行,基于/给定这些行的总和 col1 是
最简单的方法是什么?
【问题讨论】:
-
您要查找的关键字是背包问题。
-
@Stef Knapsack 似乎内存很重,但是是的,它似乎确实是我正在寻找的东西。您会推荐任何具体的实现方式吗?
-
是的,您可以使用动态编程方法,它提供pseudo-polynomial time 算法。这个想法是构建一个数组,其中单元格
(w, i)告诉您仅使用 ID 为i且权重最多为w的项目可以实现什么值。单元格(0, i)和(w, 0)易于填充;可以使用已填充的单元格用递归公式填充其他单元格。复杂度将与数组的单元数成正比,在您的示例中为 8*75,因为您只需要考虑权重的倍数 500。 -
我不知道python中有一个已经实现的背包模块,尽管肯定存在几个。如果您不想自己实现它,可以在 google 中查找它们(尽管这是一个有趣的练习)。如果您要使用其他人的实现,我建议将
col1中的所有权重除以 500。