Adloun

Implémenter, tester, jauger

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

Énoncé

Compléter l'implémentation de la table de hachage chaînée du cours en ajoutant les fonctions supprimer(table, cle) et taille(table). Proposer un jeu de tests unitaires couvrant les différents cas de figure (clé présente, absente, en collision, alvéole vide, mise à jour) pour valider l'absence de doublons.

Corrigé

def supprimer(table: list, cle) -> None:
    alv = table[hash(cle) % len(table)]
    for k in range(len(alv)):
        if alv[k][0] == cle:
            alv.pop(k)  # Supprime le couple (clé, valeur)
            return  # L'invariant garantit qu'il n'y a pas de doublon

def taille(table: list) -> int:
    return sum(len(alv) for alv in table)

# --- Jeu de Tests ---
# On choisit une table très petite (m=3) pour forcer l'apparition de collisions
T = creer(3)

# Insertions de base
inserer(T, "as", 1)
inserer(T, "sa", 2)  # En collision avec "as"
inserer(T, "or", 3)

# 1. Test de recherche d'une clé présente en collision
assert chercher(T, "sa") == 2

# 2. Test de recherche d'une clé absente
assert chercher(T, "il") is None

# 3. Test de mise à jour (ne doit pas créer de doublon de clé)
inserer(T, "as", 9)
assert chercher(T, "as") == 9
assert taille(T) == 3  # La taille reste 3, aucun doublon créé

# 4. Test de suppression d'une clé présente
supprimer(T, "or")
assert chercher(T, "or") is None
assert taille(T) == 2

# 5. Test de suppression d'une clé absente (ne doit rien faire)
supprimer(T, "il")
assert taille(T) == 2

Remarque : L'invariant essentiel de cette structure est que chaque clé apparaît au plus une fois. La fonction inserer protège cet invariant en cherchant la clé avant d'effectuer un éventuel ajout.

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.