Memoization

Memoization is a technique to make function calls in an optimized way that has the heavy computational process

It Caches the result as a key and value, Next time on calling the function it checks with the key, If the key is already present it returns the value from the cache else it does the computation process and stores it in the cache

We will learn memoization with an example problem

Problem Statement:

Write a memoize function that takes a callback.

The memoize function will return a memoized version of the callback function

All of the return values of the memoized function are cached. If the memoized callback is called with an existing cache key (defined below), then that cached value is returned without invoking the callback again.

The memoized function should also have 3 methods

  • has(...params): returns true if the cache has a key of the corresponding params

  • delete(.params): delete the cache

  • clear(): clear the cache

Solutions:

function memoize(callback) {

  let cache = new Map() 
// if object is taken it will constrant to only strings

  function getCacheKey(params) {
    return JSON.stringify(args)
  }

  const memoized = function(...params) {
    const cacheKey = getCacheKey(params)

    if(cache.has(cacheKey)) {
      return cache.get(cacheKey)
    }
    const output = callback(...params)
    cache.set(cacheKey, output)
    return output
  };

  memoized.clear = function () {
    cache.clear()
  }

  memoized.delete = function (...params) {
    const cacheKey = getCacheKey(params)
    cache.delete(cacheKey)
  }

  memoized.has = function (...params) {
    const cacheKey = getCacheKey(params)
    return cache.has(cacheKey)
  }
  return memoized;
}

const getSquare = (a) => a * a

const memo = memoize(getSquare)
memo(2) // calls getSquare callback
memo(3) // calls getSquare callback
memo(2) // return from cache
memo(5) // call getSquare callback
memo(5) // return from cache
memo.has(5) // true
memo.has(6) // false
memo.delete(5) // deletes 5 params details
memo.has(5) // false

memoized method checks if the args are in the cache or not

getCacheKey // returns the params in JSON.stringify to store it as key

memoized.delete deletes the passed params

memoized.has returns the boolean value based on availability in cache

memoized.clear clears all the params

Thanks for reading :)