Sobes.tech
Middle

O que é memorização?

sobes.tech IA

Resposta da IA

A memorização é uma técnica de otimização utilizada em programação para acelerar a execução de funções através do armazenamento em cache dos resultados das suas chamadas com determinados parâmetros de entrada.

Ao chamar a função posteriormente com os mesmos argumentos utilizados anteriormente, a função não recalcula o resultado, mas devolve o valor guardado na cache.

Isto é especialmente eficaz para funções que consomem muitos recursos e têm um comportamento determinista (funções que sempre devolvem o mesmo resultado para os mesmos dados de entrada).

Vantagens:

  • Aceleração de funções que consomem muitos recursos.
  • Redução da carga no processador ao evitar cálculos repetidos.

Desvantagens:

  • Aumento do uso de memória para armazenar a cache.
  • Pode não ser eficiente para funções que são chamadas frequentemente com argumentos diferentes ou que mudam de comportamento.

Exemplo em JavaScript:

function fibonacci(n) { // Definição funcional dos números de Fibonacci
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Chamada recursiva
}

// Versão memorizada da função fibonacci
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Verifica se o resultado já está na cache
    return cache[n];
  }

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

  // Calcula e guarda o resultado na cache
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Comparação de velocidade de execução:
console.time('Sem memorização');
fibonacci(40);
console.timeEnd('Sem memorização'); // Tempo muito maior

console.time('Com memorização');
memoizedFibonacci(40);
console.timeEnd('Com memorização'); // Tempo muito menor

Neste exemplo, sem memorização, a função fibonacci recalcula os mesmos valores várias vezes. A versão memorizada memoizedFibonacci guarda os valores calculados no objeto cache, acelerando significativamente as chamadas subsequentes com os mesmos argumentos.