首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -更改为Memoization

Python -更改为Memoization
EN

Stack Overflow用户
提问于 2014-01-20 09:30:50
回答 1查看 185关注 0票数 0

我已经编写了一个函数,当顺序发生变化时,使用给定的硬币查找n的所有变化。

代码语言:javascript
复制
def find_change(n, coins):
    if n < 0:
        return []

    if n == 0:
        return [[]]

    all_changes = []

    for last_used_coin in coins:
        curr_changes = find_change(n - last_used_coin, coins)

        for change in curr_changes:
            change.append(last_used_coin)

        all_changes.extend(curr_changes)

    return all_changes

print find_change(4, [1,2,3])

上面的代码是“正常的”,现在我想重新编写一次,但作为一个备忘录。将保存在备忘录中的值是可变的,因此我应该使用deepcopy,但我不知道如何使用它。有人能教我怎么做吗?

编辑:如何使用深度拷贝的想法:

代码语言:javascript
复制
from copy import deepcopy
lst1 =[[1], [2]]
lst 2 = deepcopy(lst1)
print lst

然后我们得到:

代码语言:javascript
复制
[[1], [2], [3]]
EN

回答 1

Stack Overflow用户

发布于 2014-01-20 10:29:54

您唯一可更改的参数是n,因此只需将其用作查找表的键:

代码语言:javascript
复制
if n not in cache:
    ...

你甚至可以把它变成一个装饰器:

代码语言:javascript
复制
def memoized(function):
    cache = {}

    def inner(n, coins):
        if n not in cache:
            cache[n] = function(n, coins)

        return cache[n]

    return inner

@memoized
def find_change(n, coins):
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21224924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档