在Python函数中使用Tuple作为缓存键进行手工记忆。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python函数中使用Tuple作为缓存键进行手工记忆。相关的知识,希望对你有一定的参考价值。

我试图在下面的函数中实现手记,它计算吃巧克力的最佳请,因为等待据说会增加快感。

def joy(chocs, day):
    n = len(chocs)
    if n == 1:
        return day * chocs[0]
    left = day * chocs[0] + joy(chocs[1:], day + 1)
    right = day * chocs[n - 1] + joy(chocs[:n - 1], day + 1)
    return max(left, right)

我想用一个 cache 字典来存储以前的结果,但我在实现上卡住了。这是我目前的尝试。

def joy(chocs, day, cache={}):
    if (chocs, day) in cache:
        return cache[(chocs, day)]
    n = len(chocs)
    if n == 1:
        return day * chocs[0]
    left = day * chocs[0] + joy(chocs[1:], day + 1)
    right = day * chocs[n - 1] + joy(chocs[:n - 1], day + 1)
    return max(left, right)

我卡在了用什么作为存储左权结果的键值上。

谁能帮我完成记忆版的函数好吗?

答案

在返回之前将结果存储在缓存中。

result = max(left, right)
cache[(chocs, day)] = result
return result

没有必要存储基本情况的结果。

另一答案

只要颠倒一下你的逻辑

def joy(chocs, day, cache={}):
    if (chocs, day) not in cache:
        n = len(chocs)
        if n == 1:
            cache[(chocs,day)] = day * chocs[0]
        else:
            left = day * chocs[0] + joy(chocs[1:], day + 1)
            right = day * chocs[n - 1] + joy(chocs[:n - 1], day + 1)
            cache[(chocs,day)] = max(left, right)
    return cache[(chocs, day)]

这样才能保证你的缓存

以上是关于在Python函数中使用Tuple作为缓存键进行手工记忆。的主要内容,如果未能解决你的问题,请参考以下文章

Python中list,tuple,dict,set的区别和用法

Python中内置数据类型list,tuple,dict,set的区别和用法

[python]python之tuple元组

python中的list()函数和tuple()函数

python的数据类型---tuple

Python元组