实现Memoization

时间:2014-01-03 22:38:14

标签: python memoization

从RosettaCode和Literate Programming查看代码示例后,我仍然对如何为我正在进行的问题实现memoization感到困惑。

在这个问题中,我执行了一个magic()公式,类似于数字上的Collat​​z序列,最终序列产生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吗?

1 个答案:

答案 0 :(得分:1)

绝对查看{stidlib的memoization实现functools.lru_cachehttp://docs.python.org/dev/library/functools.html#functools.lru_cach