¿Cómo escribir un código simple de la función Memoization en JavaScript?

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:

  1. Memorización de funciones
  2. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *