迭代地求解方程

时间:2017-03-13 21:09:47

标签: python iteration equation brute-force

我想知道如何通过以下等式优化问题:

R=A/B*C/D

其中R是输入值,ABCD是整数列表中的一个值,例如[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}},BCD的值。

我使用Cython尝试更快地运行,但仍需要几分钟才能解决。

我没有要求解决方案,只是用正确的话语向我指出正确的方向。

编辑:回答一些问题

  • 我强迫因为我不知道其他任何方式这样做,我接受建议。
  • 列表中有意重复,一种可能的解决方案是A = 21,B = 38,C = 28,D = 28.
  • 列表可能长达150个元素

    以下是我目前使用Cython的内容:

    R

1 个答案:

答案 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))