Мемоизация в программировании

Мемоизация — это обычное кеширование для функций и оптимизации каких-нибудь вычислений или других операций. Является частью так называемого «динамического программирования». Рассмотрим абстрактный пример с рекурсивной фибоначи на javascript:

// Обычный пример без мемоизации
function fibonacci(n) {
  if (n <= 1) {
    return 1;
  }

  a = fibonacci(n - 1);
  b = fibonacci(n - 2);
  
  return a + b;
}

// С мемоизацией
function fibonacciMemo(element, memo = {}) {
  if (element < 3) return 1;
  if (element in memo) return memo[element];

  memo[element] = fibonacciMemo(element - 1, memo) + fibonacciMemo(element - 2, memo);

  return memo[element];
}

// С замыканием переменной для мемоизации
function fibonacciMemo(n) {
  const memorize = {};

  function fibonacci(n) {
    if (n in memorize) return memorize[n];
    if (n < 3) return 1;
    return memorize[n] = fibonacci(n - 1) + fibonacci(n - 2);
  }

  return fibonacci(n);
}

Мемоизация может быть и без рекурсии, и вполне в реальных задачах — где здесь и сейчас надо кешировать информацию.

Читайте также
Дайджест новостей по Java
Дайджест новостей по Java
Дайджест новостей по Java

В обзоре обновления OpenJDK, JDK 22, Azul Code Inventory, Spring Shell 3.1.4, 3.0.8 и 2.1.13, Testcontainers 1.19.1.

WP Engine запустил поиск на основе искусственного интеллекта для сайтов WordPress
WP Engine запустил поиск на основе искусственного интеллекта для сайтов WordPress
WP Engine запустил поиск на основе искусственного интеллекта для сайтов WordPress

«Поиск — это сложная техническая задача », — сказал Люк Паттерсон, менеджер по продукту WP Engine, присутствующим. Пользователи все чаще ожидают, что их поиск будет более похож на GPT, добавил он. И ставки высоки: статистика Google показывает, что 82% клиентов избегают веб-сайтов, на которых у них возникают трудности с поиском.

Тренды в мобильной разработке для 2024
Тренды в мобильной разработке для 2024
Тренды в мобильной разработке для 2024

2024 год мобильная разработка не просто следует за тенденциями, а формирует их. Попробуем выделить и изучить основные направления, а также определяющие тенденции в мобильных технологиях в этом году.

Веб-фреймворк Shiny R появился в Wasm
Веб-фреймворк Shiny R появился в Wasm
Веб-фреймворк Shiny R появился в Wasm

Пакет Shinylive R экспортирует приложения Shiny R в виде Shinylive-приложений с поддержкой Wasm, которые полностью работают в веб-браузере.