Adloun

NSI (terminale) · Chapitre 2 · Exercice de TD

Problème — Cache de résultats générique

Dictionnaires et tables de hachage · niveau 3 (difficile)

Énoncé

Problème — Cache de résultats générique.

On souhaite accélérer une fonction coûteuse calcul(n) en mémorisant ses résultats. Écrire une fonction d'ordre supérieur memoise qui prend une fonction et renvoie une version mémoïsée de celle-ci, à l'aide d'un dictionnaire interne.

Corrigé

On enferme un dictionnaire dans une fermeture (closure). À chaque appel, on regarde si l'argument est déjà une clé du cache ; sinon on calcule, on stocke, puis on renvoie.


def memoise(fonction):
    cache = {}
    def version_memo(n):
        if n not in cache:
            cache[n] = fonction(n)
        return cache[n]
    return version_memo

def calcul(n):
    print("calcul de", n)   # montre les appels reels
    return n * n

rapide = memoise(calcul)
print(rapide(4))   # affiche "calcul de 4" puis 16
print(rapide(4))   # 16 directement, sans recalcul
print(rapide(5))   # affiche "calcul de 5" puis 25

Grâce au cache, chaque valeur n'est calculée qu'une seule fois ; les appels suivants pour la même clé sont en moyen.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →