La memorización es una técnica de programación que usamos para acelerar las funciones y se puede usar cuando tenemos una función costosa (toma mucho tiempo para ejecutarse). Se basa en la idea de caché {}. Un caché es solo un objeto simple. Reduce las llamadas a expresiones de funciones redundantes.
Comprendamos cómo escribir un código más simple de la función Memoization en JS.
Ejemplo 1: En este ejemplo, veremos la forma ineficiente de escribir una función que toma más tiempo para calcular .
Javascript
<script> const square = (n) => { let result = 0; // Slow function for (let i = 1; i <= n; i++) { for (let j = 1; j <= n; j++) { result += 1; } } return result; } console.log(square(10000006)); console.log(square(40)); console.log(square(5)); </script>
Producción:
Por esta razón, para calcular la operación en menos tiempo para grandes, usamos la memorización.
Hay dos formas de memorizar:
- Memorización de funciones
- Memorización de caché
Función lenta que tarda mucho tiempo en calcularse usando memoria caché.
Ejemplo 2: Cuadrado de número
Javascript
<script> const preValues = [] function square(n) { if (preValues[n] != null) { return preValues[n] } let result = 0; for (let i = 1; i <= n; i++) { for (let j = 1; j <= n; j++) { result += 1; } } // Storing precomputing value preValues[n] = result; return result; } console.log(square(50000)); console.log(square(5000)); console.log(square(500)); </script>
Producción:
Usos en programación dinámica mediante memoria caché.
Ejemplo 3: secuencia de Fibonacci
Javascript
<script> fib = (n, preValues = []) => { if (preValues[n] != null) return preValues[n]; let result; if (n <= 2) result = 1; else result = fib(n - 1, preValues) + fib(n - 2, preValues); preValues[n] = result; return result; } console.log(fib(100)); </script>
Producción:
Usando memoizer, es decir, toma una función y luego tiene que devolver una función.
Ejemplo 4:
Javascript
<script> // Memoizer const memoize = () => { // Create cache for results // Empty objects const results = {}; // Return function which takes // any number of arguments return (...args) => { // Create key for cache const argsKey = JSON.stringify(args); // Only execute func if no cached val // If results object does not have // anything to argsKey position if (!results[argsKey]) { results[argsKey] = func(...args) } return results[argsKey]; }; }; // Wrapping memoization function const multiply = memoize((num1, num2) => { let total = 0; for (let i = 0; i < num1; i++) { for (let j = 0; j < num1; j++) { // Calculating square total += 1 *; } } // Multiplying square with num2 return total * num2; }); console.log(multiply(500, 5000)); </script>
Producción:
Publicación traducida automáticamente
Artículo escrito por surbhikumaridav y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA