假设我有3个排序的数组,每个数组长度为4,我想从每个数组中选择一个索引,使得索引的总和等于4.如何在不测试所有可能选择的情况下找到最大可能总和?
例如,我有以下数组
1 : [0,0,0,8]
2 : [1,4,5,6]
3 : [1,5,5,5]
Then the solution would be 3,0,1. Because 3 + 0 + 1 = 4 and 8 + 1 + 5 is
the maximum combination where the sum of the indexes are 4.
我需要一个可以推广到n个大小为m的数组的解决方案,其中索引的总和可以等于任何值。
例如,可以要求用1000个大小为1000的数组来解决这个问题,其中索引的总和是2000.
如果某个地方有一个python包,请告诉我。
答案 0 :(得分:1)
这将实现它,不确定速度是否符合您的要求
df1=pd.DataFrame([[0,0,0,8],[1,4,5,6],[1,5,5,5]])
import functools
df=pd.DataFrame(list(itertools.product([0,1,2,3],[0,1,2,3],[0,1,2,3])))
df=df.loc[df.sum(1)<=4,:]
df.index=df.apply(tuple,1)
df.apply(lambda x : df1.lookup(df.columns.tolist(),list(x.name)),1).sum(1).idxmax()
Out[751]: (3, 0, 1)
df.apply(lambda x : df1.lookup(df.columns.tolist(),list(x.name)),1).sum(1).max()
Out[752]: 14