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.