Co to jest memoizacja w Pythonie?

Memoizacja jest techniką optymalizacji wykorzystywaną w programowaniu do zwiększenia wydajności aplikacji poprzez zapamiętywanie wyników kosztownych obliczeń. Dzięki zastosowaniu memoizacji, funkcje nie muszą ponownie obliczać wartości dla tych samych argumentów, co znacząco przyspiesza działanie programu, szczególnie w przypadku obliczeń rekurencyjnych, takich jak sekwencje Fibonacciego.

Przykład użycia memoizacji w Pythonie

Aby zilustrować memoizację, użyjemy przykładu obliczenia n-tego wyrazu ciągu Fibonacciego. Bez memoizacji, ta operacja może być bardzo czasochłonną z powodu wielokrotnego obliczania tych samych wartości. Pokażemy, jak memoizacja może zoptymalizować ten proces.

# Importujemy moduł functools do użycia dekoratora lru_cache
from functools import lru_cache

# Dekorator lru_cache zapamiętuje wyniki wcześniejszych
# wywołań funkcji z danymi argumentami
@lru_cache(maxsize=None)
def fibonacci(n):
    # Sprawdzamy, czy n jest mniejsze lub równe 1
    if n <= 1:
        return n
    # Dla n > 1, rekurencyjnie wywołujemy funkcję
    # fibonacci dla n-1 i n-2, sumując ich wyniki
    else:
        return fibonacci(n-1) + fibonacci(n-2)

# Przykładowe wywołanie funkcji
for i in range(10):
    print(fibonacci(i))

W tym przykładzie @lru_cache(maxsize=None) to dekorator z modułu functools, który automatycznie implementuje memoizację dla funkcji fibonacci. Parametr maxsize określa, ile ostatnio używanych wyników ma być zapamiętanych. Ustawienie go na None oznacza, że nie ma ograniczenia.

Dzięki zastosowaniu memoizacji, nawet wielokrotne wywołania funkcji fibonacci dla tych samych wartości n są szybkie, ponieważ wyniki są zapamiętywane i nie wymagają ponownego obliczania.

Podsumowanie

Memoizacja jest kluczową techniką w optymalizacji algorytmów, szczególnie tych rekurencyjnych. W Pythonie, memoizację można łatwo zaimplementować za pomocą dekoratora lru_cache z modułu functools, co czyni tę technikę dostępną bez potrzeby ręcznego zarządzania pamięcią podręczną. Wykorzystanie memoizacji może znacząco poprawić wydajność programu, redukując czas wykonania poprzez unikanie powtórzeń kosztownych obliczeń.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Python w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top