Adloun

Le redimensionnement et son coût amorti

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 17 — Les dictionnaires dévoilés : le hachage

Énoncé

(a) Écrire une fonction inserer_auto(table, cle, valeur) qui redimensionne automatiquement la table (doublement de taille et re-hachage de toutes les clés) si le facteur de charge dépasse . (b) Expliquer la forme de la courbe de temps cumulé pour insertions successives. (c) Démontrer mathématiquement que le coût cumulé du redimensionnement pour insertions est en .

Corrigé

(a)

def inserer_auto(table: list, cle, valeur) -> list:
    inserer(table, cle, valeur)
    # Si le facteur de charge dépasse 0.75
    if taille(table) > 0.75 * len(table):
        # Créer une nouvelle table deux fois plus grande
        nouvelle_table = creer(2 * len(table))
        # Réinsérer tous les éléments (les adresses changent !)
        for alveole in table:
            for c, v in alveole:
                inserer(nouvelle_table, c, v)
        return nouvelle_table
    return table

(b) La courbe représentant le temps d'exécution cumulé en fonction du nombre d'insertions est globalement rectiligne (croissance linéaire), indiquant un coût moyen par insertion constant. Cette droite est parsemée de petits sauts verticaux (des à-coups) de taille de plus en plus grande, se produisant lors des doublements de la table. (c) Soit une table de taille finale . Au cours des redimensionnements successifs, le nombre total d'insertions (de re-hachages) induit par les agrandissements est : Comme le nombre final d'éléments vérifie (car le dernier redimensionnement s'est produit pour dépasser ce seuil), on a . Le nombre total de copies est donc strictement majoré par , ce qui prouve que la complexité cumulée du redimensionnement est bien en . Sur insertions, le coût amorti par insertion est de .

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.