問題タブ [memoization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - スレッドセーフなメモ化
関数のメモ化に対するWesDyerのアプローチを出発点として考えてみましょう。
問題は、複数のスレッドから使用すると、問題が発生する可能性があることです。
これを避けてみましょう。ロックオンmap
:
一度f1
に多くの異なる引数を計算することができないため、これは明らかに恐ろしい考えです。a
値型がある場合、ロックオンは機能しません(制御せず、外部コードもロックする可能性がa
あるため、とにかく悪い考えです)。a
これが私が考えることができる2つのオプションです:
Lazy<T>
遅延評価用のクラスを想定する(ここを参照):
または、同期のためにオブジェクトの追加ディクショナリを保持します。
より良いオプションはありますか?
c# - C#で「純粋な関数」から最適化するには?
次の関数がある場合、それは副作用がなく、同じ入力x に対して常に同じ結果を生成するという点で純粋であると見なされます。
私が理解しているように、ランタイムが関数の純度を理解していれば、戻り値を再計算する必要がないように実行を最適化できます。
C# でこの種のランタイム最適化を実現する方法はありますか? そして、この種の最適化には名前があると思います。それは何と呼ばれていますか?
編集:明らかに、私の例の関数は、この種の最適化から多くの利益を得ることはありません. この例は、実際の例ではなく、私が念頭に置いていた純粋さのタイプを表現するために与えられました.
python - Django モデル オブジェクトの高価な計算をメモ化するにはどうすればよいですか?
JSON オブジェクトを含む UserProfile オブジェクトにいくつかの TextField 列があります。JSON を Python データ構造にシリアライズおよびデシリアライズするためのロジックをカプセル化する、各列のセッター/ゲッター プロパティも定義しました。
このデータの性質により、単一のリクエスト内でビューおよびテンプレート ロジックによって何度もアクセスされることが保証されます。逆シリアル化のコストを節約するために、読み取り時にpythonデータ構造をメモ化し、プロパティへの直接書き込み時に無効にするか、モデルオブジェクトからの信号を保存したいと思います。
メモはどこにどのように保存しますか? 特定の UserProfile がクエリによってどのようにインスタンス化されるかの背後にある魔法を理解していないため、インスタンス変数の使用について神経質になっています。安全に使用できますか、または読み取りごと__init__
に memo 属性の存在を確認する必要がありますか?hasattr()
これが私の現在の実装の例です:
ruby - Ruby数学関数のメモ化
私は次のようなコードを書きました:
@cachedResultsに私が書いた2D配列クラスが含まれている場合(数分で)、この関数の目的は、任意の(x、y)に対してMath.hypotを2回呼び出す必要がないことを確認することです。[これは、対称性などを使用してさらに最適化できますが、何でも]
そこで、関数を呼び出して、160000回実行させました。15秒強で実行されました。次に、メモ化されていないバージョンよりもどれだけ高速かを確認するために、コードを次のように変更しました。
そして、驚いたことに、再び実行するのに15秒強かかりました。まったく同じ時間。だから私の質問は、ルビーの数学関数は自然にメモ化されているのですか?そして、もしそうなら、ルビーはどの程度メモ化されていますか?
(そうでない場合、なぜ私はこの結果を一貫して得ていると思いますか?)
python - メモ化に使用されるPythonfunc_dict; 他の便利なトリック?
Python関数オブジェクトには、func_dict
関数の外部から表示され、変更可能な属性ディクショナリがありますが、関数が呼び出されても変更されません。(昨日尋ねた質問への回答からこれを学びました(#1753232):ありがとう!)私はフィボナッチ数の計算をメモしたコード( http://pythonprogramming.jottit.com/functional_programmingfunc_dict
)を読んでいて、「なぜメモ化に属性を使用しませんか?」それは機能しました(以下を参照してください;出力はコードの最後にあります)。これは、クラスプロパティを使用できるのと少し似ていますが、オブジェクトの外部に初期化コードがあります(この場合、クラスではなく関数です)。
この属性を使用して、類似した(または類似していない)トリックを実行できるのだろうか?
perl - 同じ必須属性が提供されている場合、新しいオブジェクトを作成するのではなく、既存のムースオブジェクトを取得することは可能ですか?
次のMooseパッケージがあるとします。
次に、2つのオブジェクトを作成し、一方をもう一方の「NEIGHBOUR」属性として追加します。
別の場所、たとえば別の手順で、$bのBCCH属性を別の値に更新できます。
さて、私が言及すると
その後、更新された値ではなく、BCCH属性の初期値が返されます。
賢明なことは、問題を解決する$b自体ではなく$bへの参照を追加することだと思います。
ただし、$ b(同じID)に相当するオブジェクトが多数のメソッドでインスタンス化され、いずれか1つで変更を行うことができるため、作成したすべてのオブジェクトの参照を渡すことが困難なWebアプリケーションのシナリオがあります。
理想的には、
が作成された場合、同じIDを持つオブジェクトがまだ存在しない場合にのみオブジェクトを作成する必要があります。
辞書は次のようなものです。
またはより良い解決策はありますか?
language-agnostic - なぜメモ化は言語機能ではないのですか?
疑問に思っていたのですが...メモ化が、私が知っている言語によって言語機能としてネイティブに提供されないのはなぜですか?
編集:明確にするために、私が意味するのは、言語が特定の関数をメモ可能として指定するキーワードを提供することであり、特に指定されていない限り、すべての関数が「デフォルト」で自動的にメモ化されるわけではありません。たとえば、fortranは、特定の機能をそのように指定するためのキーワードPUREを提供します。コンパイラーはこの情報を利用して呼び出しをメモできると思いますが、PUREを副作用のある関数として宣言した場合に何が起こるかは無視します。
python - メモ化とは何ですか? Python でどのように使用できますか?
Python を始めたばかりで、メモ化とは何か、どのように使用するのかわかりません。また、簡単な例がありますか?
caching - 関数のHaskellキャッシング結果
パラメータを受け取って結果を生成する関数があります。残念ながら、関数が結果を生成するのにかなりの時間がかかります。この関数は同じ入力で頻繁に呼び出されるため、結果をキャッシュできれば便利です。何かのようなもの
私はData.Arrayを調べていましたが、配列は怠惰ですが、ペアのリストで初期化する必要があります(listArrayを使用)-これは実用的ではありません。'key'が'Double'タイプなどの場合、初期化することはできません。理論的にはすべての可能な入力に整数を割り当てることができても、数万の可能な入力があり、実際にはほんの一握りしか使用しません。リストの代わりに関数を使用して、配列(または、少数の結果のみが使用されるため、ハッシュテーブルが望ましい)を初期化する必要があります。
更新:私はメモ化の記事を読んでいますが、私が理解している限り、MemoTrieは私が望むように機能する可能性があります。多分。誰かが「cachedFunction」を作成しようとすることができますか?できれば、2つのDouble引数を取る遅い関数の場合はどうでしょうか。または、代わりに、すべてのメモリを消費しない〜[0.1億]のドメインで1つのInt引数を取りますか?