私のコンピュータにmemoizationコードをテストしています。私は100000の範囲の配列を持っています。次のコードを使用します。メモ化技術の使用メモリとスピードの点でより高価です。Pythonのリストまたは辞書
def fact1(n):
if n<1:
return 1
else:
fa=1
for i in range(1, n+1):
fa*=i
return fa
、次のコードは、コードの私の理解、最適化されたメモリが低速で走行を開始かかわらず、メモ化から
memolookuptable={1:1, 2:2}
def fact2(n):
if n not in memoookuptable.keys():
for i in range(3,n+1):
if i not in memoookuptable.keys():
memolookuptable[i]=i*memolookuptable[i-1]
、だろう。計算値を保存して再計算を避けるようにメモ帳を正しく理解していますか?それが正しい場合、計算された値がすぐに利用できるという事実にもかかわらず、より大きな計算が遅くなるのはなぜですか?
memoizationを使用してメモリとスピードを最適化する最良の方法はどれですか?
短い答え:リストはdictsより少ないRAMを使用し、展開が必要な場合は高速で、インデックスを知っていればリストの検索はdictの検索よりも高速です。しかし、アイテムのリストを検索する必要がある場合、そのキーを知っている場合は、dictアイテムに直接アクセスするよりもはるかに時間がかかります。また、リスト内のすべてのスロットを使用しない場合、dictは_less_ RAMを使用できます。 –
申し訳ありません、私はmemo.keys()を書きました。私はコードを書いた後でそれを実現しました。ありがとう!私の悪い。 –