Recursion and Memoization

Cache vs Memoization

What is the difference between caching and memoization?

Abstract art representing computer programming

Caching and memoization are related concepts, but they have some key differences:

Caching is a broader term that refers to storing frequently accessed data in a faster storage location to improve performance. Caches can be implemented at various levels, such as CPU caches, disk caches, or application-level caches. Caches are typically used to store the results of expensive operations or frequently accessed data.

Memoization, on the other hand, is a specific form of caching that is applied to function calls. It involves storing the results of a function for a given set of arguments, so that if the function is called again with the same arguments, the cached result can be returned instead of recomputing it.

Here's an example to illustrate the difference:

#include <iostream>
#include <unordered_map>

// Memoization
std::unordered_map<int, int> fibCache;

int fibonacci(int n) {
  if (fibCache.count(n) > 0) {
    return fibCache[n];  // Return cached result
  }

  if (n <= 1) {
    return n;
  }

  int result = fibonacci(n - 1) + fibonacci(n - 2);
  fibCache[n] = result;  // Store result in cache
  return result;
}

// Caching
std::unordered_map<std::string, int> userAgeCache;

int getUserAge(const std::string& userId) {
  if (userAgeCache.count(userId) > 0) {
    // Return cached result
    return userAgeCache[userId];
  }

  // Simulating an expensive operation to
  // retrieve user age from a database
  int age{getUserAgeFromDatabase(userId)};

  // Store result in cache
  userAgeCache[userId] = age;
  return age;
}

In the first example, the fibonacci function uses memoization to cache the results of previous function calls. If the result for a given input n is already in the cache, it is returned directly, avoiding redundant calculations.

In the second example, the getUserAge function uses caching to store the ages of users. If the age for a given userId is already in the cache, it is returned directly, avoiding the need to retrieve it from the database again.

In summary, memoization is a specific technique for caching the results of function calls, while caching is a more general concept that can be applied to various scenarios beyond just function calls.

Answers to questions are automatically generated and may not have been reviewed.

A computer programmer
Part of the course:

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Free, unlimited access

This course includes:

  • 125 Lessons
  • 550+ Code Samples
  • 96% Positive Reviews
  • Regularly Updated
  • Help and FAQ
Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved