Python 如何在一个功能中实现两个备忘录?
我希望使用两个记忆词典解决递归函数的问题,但我不确定如何执行这个想法 据我所知,当只使用一个记忆词典时,代码结构看起来很相似。例如,要求解斐波那契数:Python 如何在一个功能中实现两个备忘录?,python,python-2.7,python-3.x,memoization,Python,Python 2.7,Python 3.x,Memoization,我希望使用两个记忆词典解决递归函数的问题,但我不确定如何执行这个想法 据我所知,当只使用一个记忆词典时,代码结构看起来很相似。例如,要求解斐波那契数: def fib_mem(n,mem=None): if n < 2: return n if mem == None: mem = {} if n not in mem: mem[n] = fib_mem(n-1,mem) + fib_mem(n-2,mem)
def fib_mem(n,mem=None):
if n < 2:
return n
if mem == None:
mem = {}
if n not in mem:
mem[n] = fib_mem(n-1,mem) + fib_mem(n-2,mem)
return mem[n]
def fib_mem(n,mem=None):
如果n<2:
返回n
如果mem==无:
mem={}
如果n不在mem中:
mem[n]=fib_mem(n-1,mem)+fib_mem(n-2,mem)
返回内存[n]
我应该在代码中添加什么来使用两个记忆化选项?我应该在def
行和递归调用中添加什么
我的问题是:
list=[(16,1,4)、(17,2,9)、(3,17,10)]
哪个
列表[i][0]
是值。考虑到两个限制因素,我应该得到最大可能的组合值:list[I][1]
和list[I][2]
我不明白为什么您要使用两个不同的字典,但我会使用一个装饰器
from functools import wraps
def memoize_two_dict(func):
dict1 = {}
dict2 = {}
@wraps(func)
def wrapper(*args, use_dict1=True):
targs = tuple(args)
if use_dict1:
if targs not in dict1:
dict1[targs] = func(*args)
return dict1[targs]
else:
if targs not in dict2:
dict2[targs] = func(*args)
return dict2[targs]
return wrapper
@memoize_two_dict
def myfunction(args):
...
# Uses the two different dictionaries
myfunction(1, use_dict1=False)
myfunction(1)
你为什么想要两本词典?你认为第二本词典会有什么改进?请注意,实现记忆化的传统方法是使用修饰符,如果mem为None,你应该通过标识测试
None
。谢谢你这么快回复。在我的问题中,我得到了两个限制因素,我尝试将其分为两个不同的问题,并通过使用最小值函数得到其中一个返回值。如果您提供了一个实际问题的示例,然后显示当前代码并描述其问题,可能会有所帮助。