VOOZH about

URL: https://www.geeksforgeeks.org/dsa/tabulation-vs-memoization/

⇱ Tabulation vs Memoization - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Tabulation vs Memoization

Last Updated : 3 Feb, 2026

Tabulation and memoization are two techniques used to implement dynamic programming. Both techniques are used when there are overlapping subproblems (the same subproblem is executed multiple times). Below is an overview of two approaches.

Memoization:

  • Top-down approach
  • Stores the results of function calls in a table.
  • Recursive implementation
  • Entries are filled when needed.

Tabulation:

  • Bottom-up approach
  • Stores the results of subproblems in a table
  • Iterative implementation
  • Entries are filled in a bottom-up manner from the smallest size to the final size.
👁 Dynamic-Programming


   Memoization   

   Tabulation   

State

State Transition relation is easy to think

State transition relation is difficult to think

Code

Code is easy to write by modifying the underlying recursive solution.

Code gets complicated when a lot of 
conditions are required

Speed

Slow due to a lot of recursive calls.

Fast, as we do not have recursion call overhead.

Subproblem solving

If some subproblems in the subproblem space need not be solved at all, the memoized solution has the advantage of solving only those subproblems that are definitely required 

If all subproblems must be solved at least once, a bottom-up dynamic programming algorithm definitely outperforms a top-down memoized algorithm by a constant factor

Table entries

Unlike the Tabulated version, all entries of the lookup table are not necessarily filled in Memoized version. The table is filled on demand.

In the Tabulated version, starting from the first entry, all entries are filled one by one

Implementation Analysis: Rod Cutting Problem

Given a rod of length n inches and an array price[]. price[i] denotes the value of a piece of length i. The task is to determine the maximum value obtainable by cutting up the rod and selling the pieces.

Examples:

Input: price[] = [1, 5, 8, 9, 10, 17, 17, 20]
Output: 22
Explanation: The maximum obtainable value is 22 by cutting in two pieces of lengths 2 and 6, i.e., 5 + 17 = 22.

Input : price[] = [3, 5, 8, 9, 10, 17, 17, 20]
Output : 24
Explanation : The maximum obtainable value is 24 by cutting the rod into 8 pieces of length 1, i.e, 8*price[1]= 8*3 = 24.

Input : price[] = [3]
Output : 3
Explanation: There is only 1 way to pick a piece of length 1.

In the rod cutting problem, the goal is to determine the maximum profit that can be obtained by cutting a rod into smaller pieces and selling them, given a price list for each possible piece length. The approach involves considering all possible cuts for the rod and recursively calculating the maximum profit for each cut. For detailed explanation and approaches, refer to Rod Cutting.

Using Top-Down DP (Memoization) - O(n^2) Time and O(n) Space

In this implementation of the rod cutting problem, memoization is used to optimize the recursive approach by storing the results of subproblems, avoiding redundant calculations.


Output
22

Using Bottom-Up DP (Tabulation) - O(n^2) Time and O(n) Space

We iteratively calculate the maximum profit for each possible rod length. For each length i, we check all possible smaller cuts, update the profit by comparing the current maximum profit with the profit obtained by combining smaller cuts, and ultimately return the maximum profit for the entire rod.


Output
22
Comment
Article Tags: