ProgresSchool
Faire le quiz
NSIterminale

Programmation dynamique : la mémoïsation expliquée

Fiche de révision complète pour maîtriser Programmation dynamique : la mémoïsation expliquée en NSI — méthode, exemples et pièges à éviter.

La mémoïsation stocke les résultats intermédiaires pour éviter les calculs redondants.
Elle transforme une complexité exponentielle en linéaire (ex : Fibonacci).
Utilisez un dictionnaire ou `@lru_cache` pour implémenter facilement.
Attention aux caches partagés et à la taille mémoire pour les grands n.
Réservée aux problèmes avec sous-problèmes redondants.

Programmation dynamique — Mémoïsation

La mémoïsation est une technique d'optimisation qui consiste à stocker les résultats intermédiaires d'une fonction pour éviter de les recalculer. Elle est particulièrement utile pour résoudre des problèmes récursifs avec des sous-problèmes redondants, comme dans la suite de Fibonacci ou le calcul des combinaisons.

Principe de base

  1. Définition : La mémoïsation transforme une fonction récursive en une fonction itérative avec cache.
  2. Structure : On utilise un dictionnaire (ou tableau) pour mémoriser les résultats déjà calculés.
  3. Condition : Avant de calculer une valeur, on vérifie si elle est déjà dans le cache.

Exemple : Suite de Fibonacci

# Version naïve (exponentielle)
def fib(n):
    if n <= 1:
        return n
    return fib(n-1) + fib(n-2)

# Version mémoïsée (linéaire)
def fib_memo(n, cache={}):
    if n in cache:
        return cache[n]
    if n <= 1:
        return n
    cache[n] = fib_memo(n-1, cache) + fib_memo(n-2, cache)
    return cache[n]

Avantages et limites

  • Gain de temps : Passe d'une complexité exponentielle (O(2ⁿ)) à linéaire (O(n)).
  • Mémoire : Consomme de l'espace pour stocker les résultats (O(n)).
  • Cas d'usage : Idéal pour les problèmes avec recouvrement de sous-problèmes (ex : calcul de combinaisons, plus court chemin).

Implémentation en Python

On peut utiliser le décorateur @functools.lru_cache pour automatiser la mémoïsation :

from functools import lru_cache

@lru_cache(maxsize=None)
def fib_lru(n):
    if n <= 1:
        return n
    return fib_lru(n-1) + fib_lru(n-2)

Pièges à éviter

  • Cache partagé : En Python, un dictionnaire comme argument par défaut peut causer des bugs (utiliser None par défaut).
  • Taille du cache : Pour les très grands n, limiter la taille du cache avec maxsize.
  • Problèmes sans recouvrement : La mémoïsation n'est pas utile si chaque sous-problème est unique.
Sans compte · Gratuit

Teste-toi sur Programmation dynamique : la mémoïsation expliquée

Réponds directement ici. La correction s'affiche aussitôt, avec la formule et le piège classique à éviter.

Programme officielAucune inscriptionCorrection immédiate
NSITerminale
Question 1
Considérons l'algorithme récursif suivant pour calculer la suite de Fibonacci avec mémoïsation : ```python def fib(n, memo={}): if n in memo: return memo[n] if n <= 1: return n memo[n] = fib(n-1, memo) + fib(n-2, memo) return memo[n] ``` Quelle est la valeur de `fib(5, {})` ?

Aucun compte requis — réponds, la correction s'affiche aussitôt.

Ta progression est déjà comptée dans ce navigateur. Crée un compte gratuit pour la retrouver sur tes autres appareils.

Questions fréquentes

Programmation dynamique : la mémoïsation expliquée : à quel niveau ce cours correspond-il ?

Cette fiche couvre le programme de NSI en Terminale, d'après le Bulletin Officiel de l'Éducation nationale.

Comment utiliser cette fiche de révision ?

Lis-la en entier une première fois sans chercher à retenir, puis relis uniquement la méthode et le piège classique. Enchaîne ensuite sur le quiz en bas de page : c'est en te trompant sur une question, et en lisant pourquoi, que la notion se fixe. Relire une fiche trois fois de suite donne l'impression de savoir, sans le savoir.

Faut-il créer un compte pour lire cette fiche ou faire le quiz ?

Non. Les quiz, les corrections détaillées et les fiches de révision sont accessibles sans créer de compte et sans donner d'adresse e-mail. Le compte gratuit sert uniquement à conserver la progression d'un appareil à l'autre.

Peut-on imprimer cette fiche ?

Oui. Utilise la fonction d'impression de ton navigateur (Ctrl+P, ou Cmd+P sur Mac). La fiche est conçue pour rester lisible sur papier.

Fiche alignée sur le programme officiel de l'Éducation nationaleToutes les fiches →

Programme en vigueur — arrêtés du 19 juillet 2019, applicable en Terminale depuis la rentrée 2020. Voir le texte

Signaler une erreur