← Tous les articles

Codes de Hamming : Comment les ordinateurs détectent leurs propres erreurs

Les données sont fragiles. Un rayon cosmique inverse un bit dans votre RAM. Du bruit électrique corrompt un signal. Une rayure endommage un disque. Dans un monde où un seul bit inversé peut faire planter un système ou corrompre un fichier, comment les ordinateurs continuent-ils de fonctionner ?

La réponse est l’une des idées les plus élégantes en informatique : les codes correcteurs d’erreurs.

Points clés

  • Les codes de Hamming ajoutent une redondance stratégique — En plaçant des bits de parité à des positions qui sont des puissances de 2, le code peut détecter ET corriger automatiquement les erreurs sur un seul bit.
  • Le syndrome pointe directement vers l’erreur — Le XOR des positions de tous les bits à “1” révèle l’emplacement exact de toute erreur sur un seul bit, permettant la correction sans retransmission.
  • 7 bits transportent 4 bits de données — Hamming(7,4) utilise seulement 3 bits supplémentaires pour protéger 4 bits de données, atteignant 57% d’efficacité tout en fournissant une correction complète des erreurs simples.
  • Ces mathématiques sont partout — La RAM ECC, les codes QR, les communications spatiales lointaines, le stockage RAID et le Bluetooth utilisent tous des variations de l’idée de Hamming.
  • L’information a des limites fondamentales — Claude Shannon a prouvé qu’il existe un maximum théorique pour la quantité de correction d’erreurs possible. Les codes de Hamming approchent cette limite avec élégance.

Pourquoi ne peut-on pas simplement envoyer les données deux fois ?

L’approche naïve de la correction d’erreurs est la répétition. Envoyez chaque bit trois fois : 0 devient 000, 1 devient 111. Si vous recevez 010, le vote majoritaire dit que c’est probablement 0.

Cela fonctionne, mais c’est gaspilleur. Pour envoyer 4 bits d’information, vous transmettriez 12 bits. C’est 33% d’efficacité.

Richard Hamming, travaillant aux Bell Labs en 1950, a posé une meilleure question : Quelle est la redondance minimale nécessaire pour non seulement détecter mais aussi corriger les erreurs ?

Sa réponse a changé l’informatique pour toujours.


Comment fonctionne le code Hamming(7,4) ?

L’intuition de Hamming était géométrique. Au lieu d’une répétition par force brute, placez les bits de parité à des positions stratégiques où ils peuvent remplir un double rôle : chaque bit de parité vérifie simultanément plusieurs positions de données.

Position:   1   2   3   4   5   6   7
Binary:    001 010 011 100 101 110 111
Type:       P1  P2  D1  P4  D2  D3  D4
            ↑   ↑       ↑
         Parity bits at powers of 2

La magie : les positions 1, 2 et 4 sont des bits de parité. Chacun vérifie toutes les positions qui ont un bit correspondant activé dans leur représentation binaire :

  • P1 (position 1 = 001) vérifie les positions 1, 3, 5, 7 (toutes les positions impaires)
  • P2 (position 2 = 010) vérifie les positions 2, 3, 6, 7
  • P4 (position 4 = 100) vérifie les positions 4, 5, 6, 7

Quand une erreur se produit, chaque vérification de parité réussit (0) ou échoue (1). Les trois résultats forment un nombre binaire pointant directement vers la position de l’erreur.


Essayez-le : Simulateur Hamming interactif

Entrez 4 bits de données, encodez-les, puis cliquez sur n’importe quel bit pour simuler une erreur. Observez la détection par syndrome localiser l’emplacement exact de l’erreur.


Pourquoi le syndrome pointe-t-il vers l’erreur ?

C’est la partie élégante. Quand vous effectuez un XOR de toutes les positions contenant un 1, vous obtenez directement la position de l’erreur.

Supposons que la position 5 soit inversée. La position 5 en binaire est 101 : - Le bit 0 est activé → la vérification P1 échoue - Le bit 1 n’est pas activé → la vérification P2 réussit - Le bit 2 est activé → la vérification P4 échoue

Syndrome = 101 = 5. L’erreur est à la position 5.

Ce n’est pas une coïncidence — Hamming a conçu les positions de sorte que leurs représentations binaires encodent cette information. Chaque position a une signature binaire unique, et les vérifications de parité lisent cette signature.


Que se passe-t-il avec deux erreurs ?

Hamming(7,4) peut : - ✓ Détecter et corriger toute erreur sur un seul bit - ✓ Détecter (mais pas corriger) les erreurs sur deux bits - ✗ Trois erreurs ou plus peuvent être mal corrigées

Pour une fiabilité accrue, une version étendue appelée SECDED (Single Error Correction, Double Error Detection) ajoute un bit de parité supplémentaire couvrant toutes les positions. La RAM ECC de votre ordinateur utilise ceci.


Où les codes de Hamming sont-ils utilisés aujourd’hui ?

Application Pourquoi c’est important
RAM ECC Les rayons cosmiques inversent environ 1 bit par Go par mois. L’ECC les corrige silencieusement.
Codes QR Jusqu’à 30% d’un code QR peut être endommagé et toujours être scanné correctement.
Espace lointain Les données de Voyager traversent des milliards de kilomètres avec des codes Reed-Solomon (descendants de Hamming).
RAID 2 Les premiers systèmes RAID utilisaient des codes de Hamming sur des matrices de disques.
Bluetooth La correction d’erreurs anticipée gère les interférences sans fil.

Le lien avec la théorie de l’information

Le travail de Hamming s’est produit parallèlement à l’article fondateur de Claude Shannon sur la théorie de l’information (1948). Shannon a prouvé que pour tout canal bruité, il existe un code correcteur d’erreurs capable de transmettre des données avec une probabilité d’erreur arbitrairement faible — si vous acceptez une certaine perte d’efficacité.

La limite de Shannon définit le maximum théorique. Les codes de Hamming ne l’atteignent pas, mais ils sont pratiques, rapides et élégants. Les codes modernes comme les codes Turbo et les codes LDPC se rapprochent de la limite de Shannon et alimentent tout, des réseaux cellulaires 4G/5G à la télévision par satellite.


L’intuition derrière l’intuition

Ce qui rend la solution de Hamming brillante n’est pas seulement qu’elle fonctionne — c’est que la position de l’erreur émerge de la structure. Les bits de parité ne “savent” pas où est l’erreur ; leurs relations l’encodent implicitement.

C’est un schéma récurrent dans la grande ingénierie : ne construisez pas une logique de détection complexe. Concevez le système de sorte que la réponse découle naturellement des mathématiques.


Questions fréquemment posées

Qu'est-ce qu'un code de Hamming ?

Un code de Hamming est un code correcteur d'erreurs qui ajoute des bits de parité à des positions spécifiques (puissances de 2) pour détecter et corriger les erreurs sur un seul bit. La version la plus courante, Hamming(7,4), encode 4 bits de données en 7 bits au total, permettant la correction automatique de toute erreur sur un seul bit sans retransmission.

Comment le syndrome identifie-t-il la position de l'erreur ?

Chaque bit de parité vérifie les positions dont la représentation binaire a un 1 à la position de ce bit de parité. Quand un bit s'inverse, les vérifications de parité qui couvrent cette position échouent. La combinaison des vérifications échouées forme un nombre binaire égal à la position de l'erreur. Cela fonctionne parce que chaque position a une "signature" binaire unique.

Les codes de Hamming peuvent-ils corriger plusieurs erreurs ?

Le Hamming(7,4) standard ne peut corriger que les erreurs sur un seul bit. Il peut détecter (mais pas corriger) les erreurs sur deux bits. Pour une fiabilité accrue, SECDED (Single Error Correction, Double Error Detection) ajoute un bit de parité supplémentaire, et des codes plus sophistiqués comme Reed-Solomon peuvent corriger plusieurs erreurs.

Pourquoi les bits de parité sont-ils placés aux puissances de 2 ?

Les positions 1, 2, 4, 8, etc. correspondent à des bits uniques en binaire (001, 010, 100, 1000). Cela garantit que chaque bit de parité vérifie une "tranche" non chevauchante du mot de code. Les positions de données (3, 5, 6, 7...) ont plusieurs bits activés en binaire, donc elles sont vérifiées par plusieurs bits de parité, créant la redondance nécessaire à la correction d'erreurs.

Où la RAM ECC est-elle utilisée et pourquoi est-ce important ?

La RAM ECC (Error-Correcting Code) est utilisée dans les serveurs, les stations de travail et les systèmes critiques. Les rayons cosmiques et le bruit électrique causent environ une inversion de bit par gigaoctet par mois. Pour les systèmes fonctionnant 24h/24 avec de grandes quantités de RAM, les erreurs non corrigées provoqueraient des plantages et de la corruption de données. La RAM ECC utilise des codes SECDED pour corriger silencieusement ces erreurs.


Résumé rapide

Les codes de Hamming résolvent la correction d’erreurs avec une redondance minimale en plaçant des bits de parité aux puissances de 2, où chaque bit vérifie un sous-ensemble spécifique de positions. Quand une erreur se produit, les vérifications de parité échouées forment un nombre binaire pointant directement vers l’erreur — pas de logique complexe requise, juste des opérations XOR. Cette approche élégante, inventée par Richard Hamming en 1950, reste fondamentale pour tout, de la mémoire ECC aux codes QR en passant par les communications spatiales lointaines.


Pour aller plus loin

  • The Art of Doing Science and Engineering par Richard Hamming — Le livre qui a inspiré cet article
  • A Mathematical Theory of Communication par Claude Shannon (1948) — Les fondements de la théorie de l’information
  • Visualisation interactive des codes correcteurs d’erreurs — L’excellente vidéo de 3Blue1Brown

Cet article fait partie de la série Explorations interactives, incluant Le Jeu de la Vie de Conway et Rule 110. Pour en savoir plus sur les fondamentaux de l’informatique, consultez les archives.