我想知道如何通过以下等式优化问题:
R=A/B*C/D
其中R是输入值,A
,B
,C
和D
是整数列表中的一个值,例如[20,21,22,23,24,24,25,25,26,28,28,28,36,36,37,38,38,39,40,40,41,42,42,43]
目标是找到最接近A
的{{1}},B
,C
和D
的值。
我使用Cython尝试更快地运行,但仍需要几分钟才能解决。
我没有要求解决方案,只是用正确的话语向我指出正确的方向。
编辑:回答一些问题
列表可能长达150个元素
以下是我目前使用Cython的内容:
R
答案 0 :(得分:0)
我相信你所要求的,特别是蛮力功能。正如评论中所建议的那样,我确实强制执行一个独特的数组来加速算法。
arr = [20,21,22,23,24,24,25,25,26,28,28,28,36,36,37,38,38,39,40,40,41,42,42,43]
def iterSolvePython(arr, desiredNumber):
arr = list(sorted(set(arr)))
best = {'a':arr[0],'b':arr[0],'c':arr[0],'d':arr[0], 'r': 1}
for a in arr:
for b in arr:
for c in arr:
for d in arr:
r = float(a)/b*c/d
if abs(desiredNumber-r) < abs(desiredNumber-best['r']):
best = {
'a':a,
'b':b,
'c':c,
'd':d,
'r':r
}
return best
print(iterSolvePython(arr, 25))