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('_')
だけで良い。
補足
時間と空間のトレードオフなので、面接でこの問題に聞かれる場合は、複雑性を考えてください。