【问题标题】:Implementing Memoization实现记忆
【发布时间】:2014-01-03 22:38:13
【问题描述】:

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

在这个问题中,我执行了一个 magic() 公式,类似于对数字的 Collat​​z 序列,最终该序列产生 1、2 或 3。

例如它可能会去:

123849 -> 2342453 -> 1233453 ->3

我想在计算后存储这些值,这样当我对越来越大的数字执行 magic() 时,运行时间就会减少。因此,例如,在执行魔术(123849)之后,我想存储 123849、2342453 和 1233453。如果将来出现这些数字中的任何一个,不必执行魔术功能,它会立即输出 3。

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

我的问题:有没有更好(更有效/更快)的方式来实现这种记忆?我可以使用列表代替字典吗?

【问题讨论】:

    标签: python memoization


    【解决方案1】:

    一定要查看functools.lru_cache,Python stdlib 的 memoization 实现:http://docs.python.org/dev/library/functools.html#functools.lru_cach

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-04
      • 2023-03-22
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多