Code de Hamming
Richard Wesley Hamming travaillait aux Bell Labs sur le Model V, un des premiers ordinateurs à relais destiné à l'Aberdeen Proving Ground, lorsqu'il observe une réalité contraignante : cette machine composée de 8 900 relais mécaniques connaît quotidiennement deux à trois défaillances. Cela représente approximativement une panne tous les deux à trois millions d'opérations. Le problème ne réside pas tant dans la détection des erreurs, puisque les circuits d'auto-vérification s'en chargent correctement. La difficulté surgit quand la machine fonctionne sans surveillance, notamment la nuit et durant les week-ends. Les calculs s'arrêtent net. Parfois l'ordinateur reprend son travail sur un nouveau problème, sans toutefois garantir la continuité des opérations précédentes.
Cette situation technique très concrète a poussé Hamming vers une réflexion plus profonde. Il cherchait un dépassement de la simple détection d'erreurs pour créer un système capable de corriger automatiquement ces défaillances. Une véritable rupture avec les approches antérieures.
La particularité du contexte technologique donne du relief à sa démarche. Les ordinateurs commençaient à supplanter les centraux téléphoniques comme systèmes de traitement d'information les plus complexes. Ces deux architectures présentaient pourtant une différence clé. Un central téléphonique dispose de nombreux chemins parallèles relativement autonomes les uns des autres. Une erreur sur l'un de ces chemins n'affecte qu'un nombre restreint d'appels. De surcroît, les erreurs échappant à la détection automatique finissent signalées par les clients eux-mêmes. Un ordinateur, lui, suit généralement un chemin unique où l'information passe maintes fois par les mêmes composants avant d'atteindre le résultat final. Une seule erreur non détectée risque d'invalider l'ensemble des calculs ultérieurs.
Face à cette structure problématique, Hamming a élaboré une approche mathématique novatrice. Son point de départ était l'information codée sous forme binaire. Cette représentation s'accordait naturellement avec les relais ouverts ou fermés, les circuits à bascule, les points et traits du morse, ou encore les bandes perforées. Sa véritable trouvaille réside dans l'ajout aux données de bits supplémentaires, nommés bits de parité, qui ne détectent pas seulement les erreurs mais les localisent avec précision.
Le cœur du code de Hamming tient dans un principe d'une simplicité trompeuse : chaque bit de parité vérifie un ensemble spécifique de positions dans le message. Par un choix judicieux de ces ensembles, on identifie exactement quelle position a subi une altération. À titre d'exemple, dans un code à sept positions dont quatre dédiées à l'information, trois bits de parité suffisent pour corriger n'importe quelle erreur simple. Cette redondance, définie comme le rapport entre le nombre total de bits utilisés et le nombre minimum nécessaire pour transmettre l'information, constitue le prix à payer pour garantir l'intégrité des données.
Pour la première fois, lors de la publication de Hamming dans le Bell System Technical Journal en 1950, un cadre théorique rigoureux aborde la question de la fiabilité des systèmes numériques. Hamming introduit notamment une représentation géométrique des codes correcteurs, où les séquences de bits sont des points dans un espace à n dimensions. La distance entre deux points, mesurée par le nombre de positions où leurs coordonnées diffèrent, se transforme en un outil d'analyse puissant pour évaluer les capacités de détection et de correction des codes.
Cette approche géométrique a permis à Hamming de prouver l'optimalité de ses codes dans plusieurs cas significatifs. Il démontre qu'aucun code ne peut détecter les erreurs simples avec moins de redondance que sa construction, et établit des résultats analogues pour la correction d'erreur simple et la détection d'erreur double. Ces démonstrations théoriques confirment que les compromis proposés entre redondance et capacité de correction atteignent le meilleur équilibre possible sous les hypothèses considérées.
Richard Wesley Hamming a entrevu d'autres applications au-delà du domaine des ordinateurs. Trois situations particulières tirent un bénéfice notable de ses codes : le fonctionnement sans surveillance sur de longues périodes avec un équipement de secours minimal, les grands systèmes étroitement interconnectés où une défaillance isolée risque de paralyser l'ensemble de l'installation, et la transmission de signaux en présence de bruit quand sa réduction s'avère impossible ou trop coûteuse.
Sa vision s'est révélée prophétique. L'avènement de l'électronique a certes rendu les composants plus fiables que les relais mécaniques, par opération. Toutefois, l'accroissement considérable de la vitesse et de la complexité des systèmes a maintenu la question des erreurs au premier plan des préoccupations. Les codes de Hamming et leurs descendants peuplent aujourd'hui les mémoires d'ordinateur, les dispositifs de stockage et les systèmes de communication.
L'héritage de Hamming vit dans des techniques de correction d'erreurs sophistiquées intégrées aux technologies modernes. Des codes plus complexes traitent désormais des motifs d'erreurs variés, tous reposant sur les fondements posés par Hamming : l'ajout contrôlé de redondance pour détecter et corriger les erreurs, et l'analyse mathématique rigoureuse des capacités et limites des codes correcteurs. Sa réflexion sur la fiabilité numérique a fait naître une vision renouvelée de la conception des ordinateurs. La gestion des erreurs n'y apparaît plus comme une question secondaire mais comme partie intégrante de l'architecture système. Une perspective qui garde toute sa pertinence à notre époque.