0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

memoization について Leetcodeを 使って調べる !!!

Last updated at Posted at 2025-01-24

今回はleetcode 2623を使ってmemoizationについて調べましょう!

Linkはこちら

leetcode : 2623. Memoize

memoizationとは?

Memoization(Memoization)は functionの結果をキャッシングし、同じ入力に対して
キャッシングされた結果を返却します。
これにより、反復的な計算を防止し、性能を最適化できます。

leetcode : 2623の正解

type Fn = (...params: number[]) => number

function memoize(fn: Fn): Fn {
    const cache : {[key: string]: number} = {};
    
    return function(...args) : number{
        const key = args.toString();
        if (cache[key] !== undefined){
            return cache[key]
        }else{
            const result = fn(...args);
            cache[key] = result
            return result
        }
        
    }
}


/** 
 * let callCount = 0;
 * const memoizedFn = memoize(function (a, b) {
 *	 callCount += 1;
 *   return a + b;
 * })
 * memoizedFn(2, 3) // 5
 * memoizedFn(2, 3) // 5
 * console.log(callCount) // 1 
 */

study!

今までのキャッシングはredisを使ったんですが、性能を最適化する時memoizationについて考えるようになりました。

アルゴリズムでは以下のように使うことができます。
例はフィボナッチ計算するコードです。

const fibonacci = ((): ((n: number) => number) => {
  const memo: Record<number, number> = {};

  const fib = (n: number): number => {
    if (n <= 1) return n;
    if (memo[n] !== undefined) return memo[n]; 

    memo[n] = fib(n - 1) + fib(n - 2);
    return memo[n];
  };

  return fib;
})();

console.log(fibonacci(10)); 
console.log(fibonacci(15)); 

出力
55
610

最後に

日本語の勉強するために作成しておりますので、間違った日本語や内容がありましたらいつでもフィードバックいただければ幸いです。

[참고자료]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?