Dictionnaires et principes du hachage : cours, méthodes et exercices corrigés
Type abstrait dictionnaire, syntaxe et parcours, table de hachage, fonction de hachage, collisions, résolution par paquets, coûts moyens et pire cas, redimensionnement, limites sur le domaine des clés, compter, regrouper, indexer, choisir sa collection.
- 16méthodes
- 35exercices corrigés
- 3problèmes
- 24pièges
- 43figures
Ce que tu sauras faire
Un dictionnaire retrouve une valeur à partir d'une clé, presque sans dépendre du nombre de données. On s'en sert depuis la première année sans regarder comment il fonctionne. Ce chapitre reprend tout l'usage du dictionnaire en Python, puis ouvre la boîte : pourquoi l'accès est-il si rapide, à quelles conditions, et pourquoi toutes les valeurs ne peuvent-elles pas servir de clé ?
- écrire, lire, tester, parcourir et copier un dictionnaire sans erreur de syntaxe ;
- définir le type abstrait dictionnaire et comparer plusieurs façons de le réaliser ;
- expliquer le principe du hachage : fonction de hachage, alvéole, collision, résolution par paquets ;
- ranger des clés dans une table à la main et calculer un haché ;
- distinguer coût moyen et pire cas, et citer l'hypothèse d'un énoncé ;
- dire quelles valeurs peuvent être des clés, et pourquoi ;
- compter, regrouper, indexer, inverser et tester l'appartenance avec un dictionnaire ;
- choisir entre liste, liste triée et dictionnaire.
L'essentiel : Vocabulaire Extrait gratuit
- Dictionnaire : ensemble d'associations (clé, valeur), avec une valeur au plus par clé.
- Table de hachage : tableau de alvéoles ; la clé va dans l'alvéole , où est la fonction de hachage.
- Haché : l'entier . Deux clés égales ont le même haché ; la réciproque est fausse en général.
- Collision : deux clés différentes dans la même alvéole. Dès qu'il y a plus de clés possibles que d'alvéoles, n'est pas injective : c'est le principe des tiroirs.
- Résolution par paquets : chaque alvéole contient une liste de couples (clé, valeur) ; on compare la clé dans le paquet.
- Facteur de remplissage : .
Une méthode du chapitre Extrait gratuit
L'énoncé demande une structure de données, ou bien tu dois en choisir une pour écrire une fonction. Le programme demande que ce choix soit un « choix éclairé ».
Une liste donne l'accès par indice en temps constant, et une recherche linéaire. Un dictionnaire donne l'accès par clé en temps constant en moyenne, mais il n'a pas d'indice et pèse plus lourd. Une liste triée donne une recherche en et une insertion en (cours, sections 2.3 et 10.1).
- Écrire les opérations du programme : chercher, ajouter, parcourir dans l'ordre, lire le -ème.
- Repérer celle qui se répète le plus.
- Regarder les données : les clés sont-elles ? Y a-t-il des répétitions ?
- Choisir, et dire le coût de l'opération la plus fréquente.
- Citer le défaut accepté : mémoire, pas d'indice, pas de répétition de clé.
« L'opération la plus fréquente est la recherche d'un adhérent par son numéro, en dans une liste de couples. Un dictionnaire de clés les numéros la ramène à un temps constant en moyenne, au prix d'une mémoire plus grande. Comme aucun accès par rang n'est demandé, ce choix ne coûte rien d'autre. »
Trois besoins. Noter la température de chaque heure d'une journée : les indices 0 à 23 sont des clés naturelles, on prend une liste. Compter les mots d'un texte : les clés sont des chaînes inconnues d'avance, on prend un dictionnaire. Enregistrer les pesées d'un jour dans l'ordre d'arrivée, avec des valeurs répétées : on garde une liste, car un dictionnaire perdrait les répétitions.
- Choisir un dictionnaire pour des clés : plus lourd, sans gain.
- Justifier par « c'est plus rapide » sans nommer l'opération.
- Oublier qu'un dictionnaire n'accepte pas deux fois la même clé.
Exercices 10 et 32.
Un exercice corrigé Extrait gratuit
On exécute le programme suivant, ligne après ligne.
stock = {'dattes': 12, 'figues': 7}
stock['amandes'] = 3
stock['dattes'] = stock['dattes'] + 1
print(len(stock))
print('figues' in stock, 7 in stock)
print(stock['dattes'])
print(stock)
print(stock['noix'])
print('fin')
- Donner sur papier l'état de
stockaprès chacune des trois premières lignes. - Prédire chaque ligne affichée, et dire où le programme s'arrête.
- Corriger la dernière lecture pour que le programme affiche
absentau lieu de s'arrêter, puisfin.
- Méthode 2 :
d[c] = vcrée la clé si elle manque et remplace sa valeur si elle existe. - Méthode 3 :
x in dne regarde que les clés, jamais les valeurs. - Lire une clé absente lève une erreur et arrête le programme.
Pour chaque ligne, demande-toi d'abord si la clé existe déjà. Écris ensuite ce que le test d'appartenance compare à quoi. Pour la question 3, cherche le test à faire avant de lire.
Question 1. Après la première ligne, stock contient deux associations. La deuxième ligne crée la clé 'amandes'. La troisième remplace la valeur de 'dattes', qui passe de 12 à 13 : aucune clé n'est créée.
Question 2. Le dictionnaire a trois clés. 'figues' est une clé, mais 7 n'en est pas une : c'est une valeur, et in ne regarde pas les valeurs. L'ordre d'affichage est l'ordre d'insertion. La lecture de 'noix' arrête le programme, et fin n'est jamais affiché.
Le programme affiche :
3
True False
13
{'dattes': 13, 'figues': 7, 'amandes': 3}
KeyError: 'noix'
Question 3.
On teste la clé avant de lire. Le test coûte peu et évite l'arrêt du programme.
if 'noix' in stock:
print(stock['noix'])
else:
print('absent')
print('fin')
Le programme affiche :
absent
fin
Écrire crée ou remplace, lire exige que la clé existe, et in ne voit que les clés. Voir les méthodes 2 et 3.
Le cours détaillé, toute la fiche « L'essentiel », 16 méthodes, 24 pièges corrigés, la carte mentale, 35 exercices corrigés, 3 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Ce chapitre est offert : il s’ouvre en entier avec un compte d’essai gratuit.
Ouvrir l'essai gratuitUne question ? WhatsAppPlan du cours
- 1. Le dictionnaire de Python : rappel complet
- 1.1 Retrouver une fiche par son numéro
- 1.2 Créer, lire, écrire
- 1.3 Tester une clé
- 1.4 Parcourir
- 1.5 Copier
- 1.6 Supprimer une clé
- 2. Le type abstrait dictionnaire
- 2.1 Une définition sans Python
- 2.2 Les opérations
- 2.3 Trois réalisations simples
- 2.4 L'adressage direct
- 3. Le principe du hachage
- 3.1 L'idée
- 3.2 Fonction de hachage et alvéoles
- 3.3 Ce qu'on attend d'une fonction de hachage
- 3.4
hashen Python
- 4. Les collisions
- 4.1 Définition
- 4.2 Les collisions sont inévitables
- 4.3 Elles arrivent très vite
- 5. Résoudre les collisions par paquets
- 5.1 Une liste par alvéole
- 5.2 Trace à la main
- 5.3 Les opérations
- 5.4 Le code
- 6. Coûts
- 6.1 Hypothèse et facteur de remplissage
- 6.2 Coût moyen
- 6.3 Pire cas
- 6.4 Redimensionner
- 6.5 Ce que disent les sujets
- 6.6 Le coût en mémoire
- 7. Hacher une chaîne
- 7.1 De la chaîne à l'entier
- 7.2 Trois mauvaises idées
- 7.3 Horner modulo
- 7.4 Choisir
- 8. Limitations sur le domaine des clés
- 8.1 Une clé ne doit pas changer
- 8.2 Les clés permises
- 8.3 Clés égales
- 8.4 La clé composée
- 9. Usage : les patrons
- 9.1 Compter
- 9.2 Regrouper
- 9.3 Indexer et inverser
- 9.4 Tester l'appartenance
- 9.5 Enregistrement et graphe
- 9.6 Coût des patrons
- 10. Choisir sa collection
- 10.1 Partir des opérations
- 10.2 Une mesure
- 10.3 Quand la liste reste le bon choix
- 11. Compléments
- 11.1 D'autres façons de traiter les collisions
- 11.2 Empreintes
- 12. Se souvenir de résultats déjà calculés
Les méthodes du chapitre
Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.
- Choisir la bonne collection à partir des opérations demandées
- Créer et remplir un dictionnaire
- Lire sans erreur : tester une clé avant d'y accéder
- Compter des occurrences en une seule passe
- Regrouper : un dictionnaire de listes
- Indexer et inverser, gérer les valeurs répétées
- Parcourir et chercher la clé de valeur maximale
- Tester l'appartenance avec un dictionnaire
- Choisir une clé hachable, composer une clé par un tuple
- Représenter un enregistrement ou un graphe par un dictionnaire
- Copier sans alias
- Calculer un haché à la main et ranger des clés dans une table
- Justifier une complexité avec dictionnaire
- Expliquer le principe du hachage en quatre phrases
- Écrire une table de hachage par paquets
- Se souvenir d'un résultat déjà calculé
Les exercices corrigés
Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.
Application directe (14)
- Lire et écrire dans un dictionnaire
- Parcourir avec keys et items
- Quelles clés sont permises
- Une table de cinq alvéoles
- Une suite de clés, deux tailles de table
- Compter les éléments d'un tableau
- Tous distincts
- Le graphe des six lieux
- Inverser un dictionnaire
- Quelle collection pour quel besoin
- Cinq fragments à corriger
- Alias et copie
- Trois complexités à justifier
- Tiroirs et probabilité
Entraînement (16)
- Analyser un texte
- Copier le jeu d'awalé
- Ranger des images par symbole
- Aucun caractère commun
- La clé de Luhn
- Le mot le plus fréquent
- Deux listes égales à l'ordre près
- Regrouper les anagrammes
- Deux nombres de somme donnée
- Trier par dénombrement
- Bilan des livraisons
- Un graphe en dictionnaire
- D'une chaîne à un entier
- Tester une répartition
- Pourquoi une liste ne peut pas être une clé
- Écrire une table de hachage
Approfondissement (5)
- Le paradoxe des anniversaires
- Forcer les collisions
- Trois façons de chercher
- Agrandir une table
- Se souvenir des temps de vol
Les problèmes de concours
Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.
- Indexer une table par un dictionnaire
- Hacher des motifs d'ADN
- Tables de hachage de largeur fixée, puis dynamique
Sujets de concours sur ce chapitre
9 sujets à télécharger gratuitement en PDF, sans corrigé. Tous les sujets de concours.
- CCINP 2026 PC, Informatique
- CCINP 2025 PC, Informatique
- CCINP 2025 TPC, Informatique
- CCINP 2025 TSI, Informatique
- CCINP 2024 PC, Informatique
- CCINP 2023 PC, Informatique
- CCINP 2023 TPC, Informatique
- CCINP 2023 TSI, Informatique
- CCINP 2020 TSI, Informatique
Comment y accéder
Ce chapitre fait partie des chapitres offerts : il s'ouvre en entier avec un compte d'essai gratuit. Créer un compte d'essai ou se connecter. Pour l'accès complet, les tarifs ou une question, écris-nous sur WhatsApp.