Where to use Memoization?

We can use the memoization technique where the use of the previously-calculated results comes into the picture. This kind of problem is mostly used in the context of recursion, especially with problems that involve overlapping subproblems.

Let’s take an example where the same subproblem repeats again and again. 

Example to show where to use memoization: 

Below is a recursive method for finding the factorial of a number:

int factorial(unsigned int n)
{
   if (n == 0)
       return 1;
   return n * factorial(n – 1);
}

What happens if we use this recursive method?

If you write the complete code for the above snippet, you will notice that there will be 2 methods in the code:

1. factorial(n)
2. main()

Now if we have multiple queries to find the factorial, such as finding factorial of 2, 3, 9, and 5, then we will need to call the factorial() method 4 times:

factorial(2)
factorial(3)
factorial(9)
factorial(5)

Recursive method to find Factorial

So it is safe to say that for finding factorial of numbers K numbers, the time complexity needed will be O(N*K)

  • O(N) to find the factorial of a particular number, and
  • O(K) to call the factorial() method K different times.

How Memoization can help with such problems?

If we notice in the above problem, while calculation factorial of 9: 

  • We are calculating the factorial of 2
  • We are also calculating the factorial of 3,
  • and We are calculating the factorial of 5 as well

Therefore if we store the result of each individual factorial at the first time of calculation, we can easily return the factorial of any required number in just O(1) time. This process is known as Memoization

Solution using Memoization (How does memoization work?):

If we find the factorial of 9 first and store the results of individual sub-problems, we can easily print the factorial of each input in O(1).

Therefore the time complexity to find factorial numbers using memoization will be O(N)

  • O(N) to find the factorial of the largest input
  • O(1) to print the factorial of each input.

What is memoization? A Complete tutorial

The term “Memoization” comes from the Latin word “memorandum” (to remember), which is commonly shortened to “memo” in American English, and which means “to transform the results of a function into something to remember.”.

In computing, memoization is used to speed up computer programs by eliminating the repetitive computation of results, and by avoiding repeated calls to functions that process the same input.

What is memoization

Table of Contents

  • What is Memoization?
  • Why is Memoization used>
  • Where to use Memoization?
  • Types of Memoization
  • How Memoization Technique used in Dynamic Programming?
    • Top Down Approach
    • Bottom Up Approach
  • How Memoization is different from Tabulation?
  • Coding Practice Problems for Memoization
  • FAQs
    • 1) Is memoization better than DP?
    • 2) Is memoization the same as caching?
    • 3) Why memoization is top down?
    • 4) Does memoization use recursion?
    • 5) Should I use tabulation or memoization?
    • 6) Where is memoization used?
    • 7) Why is it called memoization?
    • 8) How does memoization reduce time complexity?
    • 9) What is difference between memoization and caching?
    • 10) Why tabulation is faster than memoization?
  • Conclusion

   

Similar Reads

Why is Memoization used?

Memoization is a specific form of caching that is used in dynamic programming. The purpose of caching is to improve the performance of our programs and keep data accessible that can be used later. It basically stores the previously calculated result of the subproblem and uses the stored result for the same subproblem. This removes the extra effort to calculate again and again for the same problem. And we already know that if the same problem occurs again and again, then that problem is recursive in nature....

Where to use Memoization?

We can use the memoization technique where the use of the previously-calculated results comes into the picture. This kind of problem is mostly used in the context of recursion, especially with problems that involve overlapping subproblems....

Types of Memoization

The Implementation of memoization depends upon the changing parameters that are responsible for solving the problem. There are various dimensions of caching that are used in memoization technique, Below are some of them:...

How Memoization technique is used in Dynamic Programming?

Dynamic programming helps to efficiently solve problems that have overlapping subproblems and optimal substructure properties. The idea behind dynamic programming is to break the problem into smaller sub-problems and save the result for future use, thus eliminating the need to compute the result repeatedly....

How Memoization is different from Tabulation?

Tabulation vs Memoization...

Coding Practice Problems on Memoization

Question Article Practice Video Count ways to reach the n’th stair View Solve Watch Word Break Problem | DP-32 View Solve Watch Program for Fibonacci numbers View Solve Watch nth Catalan Number View Solve Watch Gold Mine Problem View Solve Watch Subset Sum Problem View Solve Watch Cutting a Rod View Solve Watch Min Cost Path View Solve Watch Minimum number of jumps to reach end View Solve Watch Longest Palindromic Substring | Set 1 View Solve Watch Longest Repeating Subsequence View Solve Watch Count ways to reach the nth stair using step 1, 2 or 3 View Solve Watch Count of different ways to express N as the sum of 1, 3 and 4 View Solve Watch Count number of ways to cover a distance View Solve Watch Count of arrays having consecutive element with different values View Solve Watch Largest Sum Contiguous Subarray View Solve Watch Smallest sum contiguous subarray View Solve Watch Unique paths in a Grid with Obstacles View Solve Watch Different ways to sum n using numbers greater than or equal to m View Solve Watch...

Frequently asked questions (FAQs) about Memoization

1: Is memoization better than DP?...

Conclusion

...

Contact Us