Najah.
Mon plan de révision⚡ Défi flash

Algorithmique · Écoles d'ingénieurs — ENSIAS

Tables de hachage (Hash Tables)

Le cours expliqué simplement, les questions que tous les élèves se posent et des exercices type examen national. Programme marocain, gratuit.

📘 Fiche de cours

L'essentiel du cours

Une table de hachage est une structure de données permettant une recherche, une insertion et une suppression en temps moyen $O(1)$. Elle repose sur une fonction de hachage $h(k)$ qui transforme une clé $k$ en un indice dans un tableau de taille $m$.

  • Hachage par division : $h(k) = k \pmod m$.
  • Gestion des collisions :
    • Chaînage : Chaque case contient une liste chaînée.
    • Adressage ouvert : On cherche une autre case libre (Sondage linéaire : $(h(k) + i) \pmod m$).

Méthodes à maîtriser

  1. Calculer l'indice d'une clé avec une fonction donnée.
  2. Insérer des éléments dans une table en gérant les collisions par chaînage ou sondage linéaire.
  3. Calculer le facteur de charge $\alpha = \frac{n}{m}$.
  4. Évaluer la complexité selon le taux de remplissage.

Exemples corrigés

Soit une table de taille $m=5$ et $h(k) = k \pmod 5$. Insérer 12, 22.

  • $h(12) = 12 \pmod 5 = 2$. Case 2 occupée par 12.
  • $h(22) = 22 \pmod 5 = 2$. Collision ! Avec sondage linéaire : $(2+1) \pmod 5 = 3$. On place 22 en case 3.

Erreurs fréquentes

  • Oublier que l'indice commence à 0.
  • Confondre le facteur de charge $\alpha > 1$ (impossible en adressage ouvert).
  • Ne pas gérer le cas où la table est pleine en adressage ouvert.

🌉 Jisr : les mots du chapitre FR ⇄ AR

Tu as appris les sciences en arabe ? Touche un mot pour voir sa traduction et une explication en darija.

La question que tu n'oses pas poser en classe ? Pose-la à UstadZéro jugement, même en darija, même à minuit. Il t'explique pas à pas et corrige ta démarche. Gratuit.

Défi flash : 4 questions

Sans compte

🎯 Tables de hachage (Hash Tables)

1/4

Quelle est la complexité moyenne de recherche dans une table de hachage ?

❓ Questions fréquentes

C'est quoi la différence entre chaînage et adressage ouvert ?
  1. Le chaînage utilise des listes pour stocker plusieurs éléments dans la même case.
  2. L'adressage ouvert stocke tous les éléments directement dans le tableau en cherchant une case vide lors d'une collision.

💡 À retenir : Le chaînage est plus robuste aux collisions, l'adressage ouvert économise la mémoire (pas de pointeurs).

kifach n7seb l'index ila kan l'key string machi nombre ?
  1. Il faut d'abord convertir la chaîne en un nombre (ex: somme des codes ASCII des caractères).
  2. Appliquer ensuite la fonction de hachage modulo la taille de la table.

💡 À retenir : La fonction de conversion doit être efficace pour éviter trop de collisions dès le départ.

chno hiya l'avantage d'une table de hachage 3la une liste chainée ?
  1. La liste chaînée a une complexité de recherche $O(n)$.
  2. La table de hachage permet une recherche en $O(1)$ en moyenne.

💡 À retenir : Le gain de vitesse est énorme pour les grands volumes de données.

kifach n3ref wach l'hash table 3amrat ?
  1. On calcule le facteur de charge $\alpha = \frac{n}{m}$.
  2. Si $\alpha$ approche 1, la table est saturée.

💡 À retenir : En adressage ouvert, il faut redimensionner la table avant que $\alpha$ ne dépasse 0.7.

Est-ce que la fonction de hachage doit être injective ?

Non, c'est impossible car l'espace des clés est souvent plus grand que la taille de la table.

💡 À retenir : Une bonne fonction doit être "uniforme" pour minimiser les collisions.

Pourquoi le sondage linéaire crée des "clusters" ?

Parce que les collisions successives remplissent des cases adjacentes, créant des blocs de données qui ralentissent la recherche.

💡 À retenir : Le sondage quadratique réduit ce phénomène.

Est-ce qu'on peut supprimer un élément dans une table avec adressage ouvert ?

Oui, mais on ne peut pas laisser la case vide (sinon on casse la chaîne de recherche). On utilise un marqueur "DELETED".

💡 À retenir : Le marqueur permet de continuer la recherche sans arrêter le processus.

Quelle est la complexité dans le pire des cas ?

$O(n)$, si tous les éléments sont hachés vers la même case (collision totale).

💡 À retenir : Le choix d'une bonne fonction de hachage est crucial pour éviter ce cas.

Est-ce que la taille de la table doit être un nombre premier ?

Oui, c'est recommandé pour réduire les collisions, surtout avec la méthode de division.

💡 À retenir : Cela permet une meilleure distribution des clés.

Comment choisir la taille m ?

Elle doit être proportionnelle au nombre d'éléments attendus pour maintenir $\alpha$ autour de 0.5 - 0.7.

💡 À retenir : Trop grande = gaspillage, trop petite = collisions.

Est-ce que le hachage est utile pour trier des données ?

Non, les tables de hachage ne maintiennent pas l'ordre des éléments.

💡 À retenir : Utilisez un arbre de recherche binaire si l'ordre est nécessaire.

Est-ce que la fonction de hachage peut être aléatoire ?

Elle doit être déterministe (même clé = même index), mais peut utiliser une graine (seed) pour la sécurité.

💡 À retenir : La reproductibilité est obligatoire pour retrouver les données.

✍️ Exercices type examen national

Exercice 1

Soit une table de hachage de taille $m=7$ utilisant le hachage par division $h(k) = k \pmod 7$. Insérez les clés suivantes : 10, 22, 31, 4, 17.

  1. Utilisez le chaînage pour gérer les collisions.
  2. Donnez l'état final de la table.
Voir la correction détaillée : inscription gratuite

Exercice 2

On utilise une table de taille $m=10$ et le sondage linéaire. Insérez 15, 25, 35.

Voir la correction détaillée : inscription gratuite

Exercice 3

Calculez le facteur de charge pour une table de 100 cases contenant 75 éléments. Interprétez.

Voir la correction détaillée : inscription gratuite

Un prof de Algorithmique pour aller plus loin

Les cours du soir avec des profs vérifiés arrivent : inscris-toi pour être prévenu(e) en premier.

Être prévenu(e) gratuitement

Autres chapitres de Algorithmique