从RosettaCode和Literate Programming查看代码示例后,我仍然对如何为我正在进行的问题实现memoization感到困惑。
在这个问题中,我执行了一个magic()公式,类似于数字上的Collatz序列,最终序列产生1,2或3。
例如,它可能会出现:123849 -> 2342453 -> 1233453 ->3
我想在计算它们之后存储这些值,这样当我对越来越大的数字执行magic()时,运行时间会减少。因此,例如,在做了魔术(123849)之后,我想存储123849,2342453和1233453.如果将来出现这些数字中的任何一个,而不是必须执行魔术功能,它将立即输出3. / p>
ones=[]
twos=[]
threes=[]
def magic(x):
# Memoization
if ones.count(x)>0: return 1
if twos.count(x)>0: return 2
if threes.count(x)>0: return 3
sequence=[]
<generate magic sequence, add each value to sequence>
# Add each sequence to the appropriate list
if final_value==1: ones.extend(sequence)
if final_value==2: twos.extend(sequence)
if final_value==3: threes.extend(sequence)
return final_value
我的问题:是否有更好(更高效/更快)的方式来实现此备忘录?我可以使用列表而不是dicts吗?
答案 0 :(得分:1)
绝对查看{stidlib的memoization实现functools.lru_cache
:http://docs.python.org/dev/library/functools.html#functools.lru_cach