避免变量重新计算?

时间:2015-11-09 11:10:44

标签: python optimization dynamic-programming memoization

我有这样的行代码 -

while someMethod(n) < length and List[someMethod(n)] == 0:
    # do something
    n += 1

其中someMethod(arg)对数字n进行一些计算。这段代码的问题在于我两次做同样的计算,这是我需要避免的。

一种选择是 -

x = someMethod(n)
while x < length and List[x] == 0:
    # do something
    x = someMethod(n + 1)

我将someMethod(n)的值存储在变量x中,然后再使用它。但是,这种方法的问题是代码在一个被多次调用的递归方法中。因此,正在创建大量过多的变量x实例,这会降低代码的速度。

这里是代码的剪辑 -

def recursion(x, n, i):
    while someMethod(n) < length and List[someMethod(n)] == 0:
        # do something
        n += 1
    # some condition
    recursion(x - 1, n, someList(i + 1))

并且在整个代码中多次调用此递归方法,并且递归非常深。 有没有其他方法可以解决这样的问题?

如果可能,请尝试独立于语言。

2 个答案:

答案 0 :(得分:1)

您可以使用装饰技术进行记忆:

def memoize(f):
    memo = dict()
    def wrapper(x):
        if x not in memo:
            memo[x] = f(x)
        return memo[x]
    return wrapper

@memoize
def someMethod(x):
    return <your computations with x>

答案 1 :(得分:0)

正如我正确理解你的代码,你正在寻找某种记忆。

https://en.wikipedia.org/wiki/Memoization

这意味着在每次递归调用时,您必须尽可能地保存过去的计算,以便在当前计算中使用它。