関数 fn を指定すると、その関数の メモ化された バージョンを返します。
メモ化された 関数は、同じ入力で 2 回呼び出されることがない関数です。代わりに、キャッシュされた値を返します。
可能な入力関数は、sum、fib、factorial の 3 つであると仮定できます。
sum は 2 つの整数 a と b を受け入れ、b を返します。 a != b である引数 (b, a) の値がすでにキャッシュされている場合、その値を引数 (a, b) に使用することはできないとします。たとえば、引数が (3, 2) と (2, 3) の場合、2 つの別々の呼び出しを行う必要があります。
fib は単一の整数 n を受け入れ、n 階乗は単一の整数 n を受け入れ、n
例 1:
入力:
fnName = "sum" actions = ["call","call","getCallCount","call","getCallCount"] values = [[2,2],[2,2],[],[1,2],[]]
出力: [4,4,1,3,2]
説明:
const sum = (a, b) => a + b; const memoizedSum = memoize(sum); memoizedSum(2, 2); // "call" - returns 4. sum() was called as (2, 2) was not seen before. memoizedSum(2, 2); // "call" - returns 4. However sum() was not called because the same inputs were seen before. // "getCallCount" - total call count: 1 memoizedSum(1, 2); // "call" - returns 3. sum() was called as (1, 2) was not seen before. // "getCallCount" - total call count: 2
例 2:
入力:
fnName = "factorial" actions = ["call","call","call","getCallCount","call","getCallCount"] values = [[2],[3],[2],[],[3],[]]
出力: [2,6,2,2,6,2]
説明:
const factorial = (n) => (n <= 1) ? 1 : (n * factorial(n - 1)); const memoFactorial = memoize(factorial); memoFactorial(2); // "call" - returns 2. memoFactorial(3); // "call" - returns 6. memoFactorial(2); // "call" - returns 2. However factorial was not called because 2 was seen before. // "getCallCount" - total call count: 2 memoFactorial(3); // "call" - returns 6. However factorial was not called because 3 was seen before. // "getCallCount" - total call count: 2
例 3:
入力:
fnName = "fib" actions = ["call","getCallCount"] values = [[5],[]]
出力: [8,1]
説明:
fib(5) = 8 // "call" // "getCallCount" - total call count: 1
制約:
> 0 <= a, b <= 105 > 1 <= n <= 10 > 0 <= actions.length <= 105 > actions.length === values.length
actions[i] は「call」または「getCallCount」のいずれかです
fnName は「sum」、「factorial」、「fib」のいずれかです
JavaScript アプリケーションの開発と最適化を続けるときは、メモ化の力を思い出してください。メモ化する適切な関数を特定し、適切なキャッシュ戦略を実装することで、パフォーマンスを大幅に向上させ、顧客にとってよりシームレスで応答性の高いユーザー エクスペリエンスを生み出すことができます。
この記事がお役に立てば幸いです。記事が気に入ったら、「いいね!」を残し、コメント欄に遠慮なく質問を残してください。今日はここまでです。
以上がLeetcode #Memoizeの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。