假设我们有一个python列表
list = [[1,2,3],[4,5,6],[7,8,9]]
我将总和定义如下:
sum:是每个子列表中单个条目(不同索引)的总和。
这听起来很复杂,所以我举一个例子,
对于上面的列表,1 + 5 + 9是总和之一,因为1来自第一子列表,5来自第二子列表,9来自第三子列表,并且它们在各自的子列表中都具有不同的位置。
所以我不能,1 + 4 + 7
因为1,4和7是其子列表中的第一项。
我不能,1 + 5 + 8
因为5和8都是列表中的第二个条目,依此类推
例如,我想找到每个子列表中各个条目的总和最高!
我如何遍历所有这些可能的总和,然后从所有这些总和中获得最高收益。
对于上面的列表,我们有3 ^ 3 = 27个不同的和。
有没有一种有效的方法来用python做到这一点?
这是可以使用匈牙利算法解决的经典问题。sklearn中有一个实现:
from sklearn.utils.linear_assignment_ import linear_assignment
import numpy as np
M = [[1,2,3],[4,5,6],[7,8,9]]
M = np.array(M) #convert to numpy array
result = linear_assignment(M)
answer = sum(M[cell[0]][cell[1]] for cell in result)
迭代所有可能的和是一个坏主意(O(N!))。上面的算法必须在O(N ^ 3)中运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句