14. `memo()`を実装する

少し工夫が必要  - accepted / - tried

パフォーマンス向上させるためにMemoizationはよく使われています。Reactを使っていれば、React.memoは絶対使ったことあるでしょう。

アルゴリズム問題ではMemoizationはよく利用される、再起で解決できる場合のほとんどはMemoizationを使って改善できる、さらにDynamic Programmingのアプローチに導くかもしれません。

なので、memo()を作ってください。同じ引数が渡される場合は、計算済みの結果をすぐ返す。

const func = (arg1, arg2) => {
  return arg1 + arg2
}

const memoed = memo(func)

memoed(1, 2) 
// 3, func は実行される

memoed(1, 2) 
// 3, funcは実行されない

memoed(1, 3)
// 4, 違う引数で、funcは実行される

引数は文字列に限らないから、cache keyを生成するresolverをうけるようにしてください。

const memoed = memo(func, () => 'samekey')

memoed(1, 2) 
// 3、funcは実行される、'samekey'としてcacheされる

memoed(1, 2) 
// 3、cache keyは同じだから、funcは実行されない

memoed(1, 3) 
// 3、 cache keyは同じだから、3は返される

デフォルトのcache keyは Array.from(arguments).join('_')だけで良い。

補足

時間と空間のトレードオフなので、面接でこの問題に聞かれる場合は、複雑性を考えてください。

バッグフリーで普通なコードは何より。

(3)
(204)