Czym jest memoizacja w JavaScript?

Memoizacja to technika optymalizacji wydajności polegająca na zapamiętywaniu wyników wywołań funkcji, aby przy kolejnych wywołaniach z tymi samymi argumentami aby nie trzeba było wykonywać ponownie obliczeń, a zamiast tego zwracać wynik z pamięci (cache). Jest to szczególnie użyteczne w przypadku kosztownych obliczeniowo operacji oraz funkcji rekurencyjnych, takich jak obliczanie ciągów Fibonacciego.

Przykład memoizacji w JavaScript

Zobaczmy, jak możemy zaimplementować memoizację w JavaScript na przykładzie funkcji obliczającej n-ty element ciągu Fibonacciego:

// Funkcja obliczająca n-ty element ciągu Fibonacciego z memoizacją
function fibonacci(n, memo = {}) {
    if (n in memo) return memo[n];
    if (n <= 2) return 1;

    memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
    return memo[n];
}

HTML

Aby zademonstrować użycie memoizacji, stwórzmy prosty interfejs użytkownika, który pozwoli użytkownikowi na obliczenie n-tego elementu ciągu Fibonacciego:

<!DOCTYPE html>
<html>
<head>
    <title>Memoizacja w JavaScript</title>
</head>
<body>
    <label for="number">Wpisz numer elementu ciągu Fibonacciego:</label>
    <input type="number" id="fibNumber">
    <button onclick="calculateFib()">Oblicz</button>
    <p>Wynik: <span id="result"></span></p>

    <script>
        // Funkcja wywoływana po kliknięciu przycisku
        function calculateFib() {
            const n = document.getElementById("fibNumber").value;
            const result = fibonacci(parseInt(n));
            document.getElementById("result").innerText = result;
        }
    </script>
</body>
</html>

Podsumowanie

Memoizacja w JavaScript jest potężną techniką optymalizacji, która może znacząco przyspieszyć wykonywanie programów poprzez zmniejszenie liczby obliczeń potrzebnych do uzyskania wyniku. Wykorzystanie pamięci cache do przechowywania wyników obliczeń i unikanie powtarzania tych samych operacji pozwala na oszczędność zasobów i czasu, co jest szczególnie ważne w przypadku operacji o wysokiej złożoności obliczeniowej. Implementacja memoizacji jest stosunkowo prosta, ale może przynieść znaczące korzyści w różnorodnych scenariuszach programistycznych, zwłaszcza przy pracy z ciężkimi obliczeniami i algorytmami rekurencyjnymi.

 

Scroll to Top