在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的区别和用法