Numérique et sciences informatiques (spécialité) · TerminaleBac
Dictionnaires et tables de hachage : exercices de Terminale NSI
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
- Un dictionnaire associe à chaque clé une seule valeur : il stocke des couples clé:valeur 13.
- Une fonction de hachage h calcule à partir d'une donnée sa position dans une table 2.
- La recherche dans une table de hachage est en O(1) en moyenne, mais peut atteindre O(n) dans le pire des cas 3.
- Une table de hachage ne conserve pas l'ordre des clés, contrairement à un arbre équilibré 3.
- Les exercices vont de la lecture d'un dictionnaire jusqu'à l'écriture d'une fonction qui transforme un dictionnaire.
Comment utiliser ces exercices
Cette série t'entraîne sur les dictionnaires et les tables de hachage, juste après les listes chaînées, les piles et les files. Les exercices sont rangés par difficulté croissante : le niveau 1 vérifie que tu lis correctement un dictionnaire, le niveau 2 te fait calculer à la main avec une fonction de hachage, le niveau 3 te demande de raisonner ou d'écrire du code.
Pour progresser, cherche d'abord seul, sur papier. Ouvre un indice seulement quand tu es bloqué, puis compare ta démarche avec la correction étape par étape. Si ton résultat final est juste mais que ta méthode diffère, relis quand même la correction : au bac, c'est le raisonnement qui est noté.
Les exercices
Exercice 1 Lire un dictionnaire de notes
Un professeur range les notes de trois élèves dans un dictionnaire Python :
notes = {"Léa": 14, "Tom": 9, "Inès": 16}
- Quelles sont les clés ? Quelles sont les valeurs ?
- Que renvoie
notes["Tom"]? - Calcule la moyenne des trois notes.
Indice 1
Un dictionnaire contient des couples clé:valeur : la clé est à gauche des deux-points 1.
Indice 2
Pour la moyenne, additionne toutes les valeurs puis divise par le nombre de clés.
Voir la correction pas à pas
Les clés sont les noms :
"Léa","Tom"et"Inès". Les valeurs sont les notes : 14, 9 et 16.L'expression
notes["Tom"]cherche la valeur associée à la clé"Tom". Elle renvoie 9.On additionne les valeurs : .
On divise par le nombre d'élèves : .
La moyenne de la classe est 13. Retiens que l'accès notes[clé] donne la valeur, et qu'on ne peut pas chercher un nom à partir d'une note avec cette syntaxe.
Exercice 2 Compter les lettres d'un mot
On exécute ce programme :
mot = "banane"
compteur = {}
for lettre in mot:
if lettre in compteur:
compteur[lettre] = compteur[lettre] + 1
else:
compteur[lettre] = 1
- Donne le contenu final de
compteur. - Quelle est la somme de toutes les valeurs du dictionnaire ?
Indice 1
Déroule la boucle lettre après lettre : la première fois qu'une lettre apparaît, on crée la clé avec la valeur 1.
Indice 2
La somme des valeurs correspond au nombre de passages dans la boucle.
Voir la correction pas à pas
b: absente, on crée{"b": 1}.a: absente, on obtient{"b": 1, "a": 1}.n: absente, on ajoute"n": 1.Le deuxième
aest déjà une clé : sa valeur passe à 2. Le deuxièmenpasse aussi à 2.e: absente, on ajoute"e": 1. Le contenu final est{"b": 1, "a": 2, "n": 2, "e": 1}.La somme des valeurs vaut , soit la longueur du mot.
Le dictionnaire compte 6 lettres au total, réparties sur 4 clés. Chaque lettre n'a qu'une seule valeur : son nombre d'apparitions 3.
Exercice 3 Calculer une position avec une fonction de hachage
Une fonction de hachage associe à une donnée sa position dans une table 2. On définit ici une fonction très simple pour des mots en majuscules : est le reste de la division par 7 de la somme des rangs des lettres dans l'alphabet (A = 1, B = 2, ..., Z = 26). La table possède 7 cases, numérotées de 0 à 6.
Rappel de quelques rangs : A = 1, C = 3, E = 5, H = 8, L = 12, N = 14, O = 15, R = 18, S = 19, T = 20, U = 21.
Calcule la position de la clé "CHAT".
Indice 1
Écris d'abord le rang de chaque lettre, puis additionne.
Indice 2
Divise la somme par 7 et garde seulement le reste.
Voir la correction pas à pas
Rangs des lettres : C = 3, H = 8, A = 1, T = 20.
Somme : .
Division par 7 : , donc le reste est 4.
On range donc la clé
"CHAT"dans la case numéro 4.
La position de "CHAT" est la case 4. Le reste de la division garantit un résultat entre 0 et 6, c'est-à-dire une case qui existe.
Exercice 4 Repérer une collision
On reprend la fonction de l'exercice précédent (somme des rangs, puis reste de la division par 7). On insère dans l'ordre les clés "CHAT", "LUNE", "TOUR" et "ROSE" dans la table de 7 cases.
- Calcule la position de chaque clé.
- Deux clés sont-elles envoyées dans la même case ? Si oui, combien de clés contient cette case ?
Indice 1
Tu connais déjà la position de "CHAT". Calcule les trois autres de la même façon.
Indice 2
Une case qui reçoit plusieurs clés peut simplement contenir une liste de couples.
Voir la correction pas à pas
"LUNE": et , position 3."TOUR": et , position 4."ROSE": et , position 1.Avec
"CHAT"en position 4, on constate que"CHAT"et"TOUR"visent la même case : c'est une collision.On compte les clés de la case 4 :
"CHAT"et"TOUR", soit 2 clés.
La case 4 contient 2 clés. Une collision n'est pas une erreur du programme : une table de hachage doit prévoir ce cas, par exemple en gardant une petite liste dans chaque case. Quand beaucoup de clés se regroupent, la recherche ne se fait plus en une seule étape ; c'est ce qui explique le pire cas en O(n) de certaines tables de hachage 3.
Exercice 5 Taille d'une empreinte
Pour vérifier qu'un document n'a pas été modifié, on utilise une fonction de hachage qui calcule une empreinte du document 2. La fonction MD5 produit des empreintes de 128 bits, et SHA-1 des empreintes de 160 bits 2. Un octet vaut 8 bits.
De combien d'octets l'empreinte SHA-1 est-elle plus longue que l'empreinte MD5 ?
Indice 1
Convertis d'abord chaque taille en octets.
Indice 2
Fais ensuite la différence.
Voir la correction pas à pas
Empreinte MD5 : octets.
Empreinte SHA-1 : octets.
Différence : octets.
L'empreinte SHA-1 est plus longue de 4 octets. Une empreinte a toujours une taille fixe, quelle que soit la taille du document de départ ; elle sert à détecter une modification, pas à retrouver le document.
Exercice 6 Comparer deux structures de recherche
Un arbre équilibré et une table de hachage peuvent représenter un tableau associatif de éléments. Dans le pire des cas, la recherche dans un arbre équilibré est en O(), alors que la table de hachage est en O(1) en moyenne 3. On suppose qu'un arbre équilibré contient éléments et que le nombre de comparaisons dans le pire des cas est de l'ordre de .
- Estime ce nombre de comparaisons.
- Pour quel besoin choisirais-tu l'arbre plutôt que la table de hachage ?
Indice 1
Cherche la puissance de 2 égale à 1024.
Indice 2
Pense à ce que l'arbre garde et que la table ne garde pas 3.
Voir la correction pas à pas
On cherche tel que .
Comme , on a : environ 10 comparaisons dans le pire des cas.
Les arbres équilibrés préservent l'ordre des clés, ce qui permet de les parcourir dans l'ordre ou de trouver une clé proche d'une valeur donnée ; les tables de hachage ne le permettent pas 3.
On choisit donc l'arbre quand l'ordre des clés compte, ou quand on veut une borne garantie même dans le pire des cas.
Le nombre de comparaisons est d'environ 10. Retiens ce compromis : la table de hachage est plus rapide en moyenne, l'arbre est plus régulier et ordonné 3.
Exercice 7 Valeur totale d'un stock
Un magasin range son stock dans un dictionnaire : la clé est le nom du fruit, la valeur est un couple (quantité, prix unitaire en euros).
stock = {"pomme": (12, 0.50), "poire": (10, 0.80), "kiwi": (20, 0.25)}
def valeur_totale(d):
total = 0
for fruit in d:
quantite, prix = d[fruit]
total = total + quantite * prix
return total
- Que contient la variable
quantitelors du passage sur"poire"? - Quelle valeur renvoie
valeur_totale(stock)? - Quelle instruction ajoute 5 bananes à 0,40 euro ?
Indice 1
Le parcours for fruit in d donne les clés ; la valeur s'obtient avec d[fruit].
Indice 2
Calcule la valeur de chaque fruit, puis additionne.
Voir la correction pas à pas
Pour la clé
"poire",d[fruit]vaut(10, 0.80). Le dépaquetage donnequantite = 10etprix = 0.80.Valeur des pommes : euros.
Valeur des poires : euros.
Valeur des kiwis : euros.
Total : euros.
Pour ajouter un élément, on affecte une nouvelle clé :
stock["banane"] = (5, 0.40).
La fonction renvoie 19 euros. Ajouter une nouvelle clé se fait par une simple affectation ; si la clé existait déjà, sa valeur serait remplacée, puisqu'une clé n'a qu'une valeur 3.
Exercice 8 Regrouper des élèves par groupe
Un dictionnaire associe chaque élève à son groupe :
groupes = {"Léa": "A", "Tom": "B", "Inès": "A"}
Écris une fonction inverser(d) qui renvoie un nouveau dictionnaire dont les clés sont les groupes et les valeurs sont les listes des élèves de ce groupe. Pour groupes, le résultat attendu est {"A": ["Léa", "Inès"], "B": ["Tom"]}.
Indice 1
Il faut parcourir les clés de d, puis regarder la valeur associée pour savoir dans quel groupe ranger l'élève.
Indice 2
Quand un groupe n'est pas encore une clé du résultat, crée-lui d'abord une liste vide.
Voir la correction pas à pas
On crée un dictionnaire vide :
resultat = {}.On parcourt les élèves :
for eleve in d:.On lit le groupe de l'élève :
g = d[eleve].Si ce groupe n'est pas encore une clé de
resultat, on l'ajoute avec une liste vide :if g not in resultat: resultat[g] = [].On ajoute l'élève à la liste du groupe :
resultat[g].append(eleve).On renvoie
resultatà la fin de la fonction, hors de la boucle.
La fonction complète est :
def inverser(d):
resultat = {}
for eleve in d:
g = d[eleve]
if g not in resultat:
resultat[g] = []
resultat[g].append(eleve)
return resultat
Il faut des listes en valeurs, car plusieurs élèves partagent un même groupe : une clé ne peut porter qu'une seule valeur 3. L'ordre d'affichage des clés ne doit jamais être utilisé pour raisonner.
Les questions qu'on se pose
Pourquoi la recherche dans un dictionnaire est-elle si rapide ?
Que faire quand deux clés ont la même position dans la table ?
C'est une collision. Elle est normale et une table de hachage correctement écrite la gère, par exemple en gardant plusieurs couples dans une même case, comme dans l'exercice 4. Plus il y a de collisions, plus la recherche ralentit, ce qui explique le pire cas en O(n) 3.
Sources
- Fiche NSI Terminale : Dictionnaire, Pixees (INRIA). Consulté le 7 novembre 2026.
- Hachage (encyclopédie technique), Universalis. Consulté le 7 novembre 2026.
- Tableau associatif, Wikipédia. Consulté le 7 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.