【发布时间】:2014-01-03 22:38:13
【问题描述】:
查看 RosettaCode 和 Literate Programming 的代码示例后,我仍然对如何为我正在做的问题实现记忆感到困惑。
在这个问题中,我执行了一个 magic() 公式,类似于对数字的 Collatz 序列,最终该序列产生 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
我的问题:有没有更好(更有效/更快)的方式来实现这种记忆?我可以使用列表代替字典吗?
- 我已阅读此内容:What is memoization and how can I use it in Python? 并了解您通常应该使用 dicts。我只是想知道使用列表和字典进行记忆是否有很大区别。
【问题讨论】:
标签: python memoization