Passer au contenu principal
ArithmétiqueNotion · Glossaire

codage de Fibonacci

Le codage de Fibonacci représente un entier positif par un mot binaire fondé sur sa décomposition en nombres de Fibonacci non consécutifs. Un 1 terminal crée le marqueur de fin 11, ce qui permet de séparer sans ambiguïté plusieurs codes concaténés.
Encodage de 50 avec les poids de Fibonacci Les poids 3, 13 et 34 donnent les bits 00100101, suivis d'un bit terminal 1. Encoder 50 50 = 3 + 13 + 34 Poids 1 2 3 5 8 13 21 34 Bits 0 0 1 0 0 1 0 1 1 décomposition de Zeckendorf fin 11 bit terminal
Les trois poids rouges totalisent 50 ; le bit jaune ajouté transforme la fin du mot en marqueur 11.
Sommaire

Ce que vous allez apprendre

  • Relier la décomposition de Zeckendorf aux bits du code.
  • Encoder 50 en 001001011 par étapes vérifiables.
  • Décoder un mot et repérer sa terminaison 11.
  • Distinguer ce code de l'écriture binaire usuelle.

En clair

Prenons le nombre 50 et une rangée de valeurs de Fibonacci : 1, 2, 3, 5, 8, 13, 21, 34. On coche 34, 13 et 3, car leur somme vaut 50. Sous ces valeurs, les coches deviennent des 1 et les autres places des 0.
Deux valeurs voisines de la rangée ne sont jamais cochées ensemble. On ajoute enfin un 1 au mot obtenu. Les deux 1 de la fin signalent alors où s'arrête ce nombre dans une suite de codes.

Définition

Le codage de Fibonacci est un code binaire pour les entiers strictement positifs. Il utilise les poids 1, 2, 3, 5, 8, 13, etc., c'est-à-dire les nombres de Fibonacci à partir du second 1, sans répéter le poids 1. Le théorème de Zeckendorf garantit que chaque entier positif possède une unique décomposition en somme de tels poids non consécutifs. Pour un entier noté n, le coefficient bk vaut 1 lorsque le poids de Fibonacci Fk est retenu, et 0 sinon. L'indice m désigne celui du plus grand poids retenu.
n=k=2mbkFk,bk{0,1},bkbk+1=0n=\sum_{k=2}^{m} b_k F_k,\qquad b_k\in\{0,1\},\qquad b_k b_{k+1}=0
La dernière condition interdit deux poids consécutifs. Les bits b2, b3, … sont écrits par poids croissants jusqu'au dernier bit égal à 1. On leur ajoute un bit 1 : le code complet se termine donc par 11. Comme la partie issue de Zeckendorf ne contient jamais 11, ce suffixe sert de séparateur lors du décodage de codes concaténés.

Un exemple, pas à pas

On veut coder l'entier 50. Les poids disponibles, dans l'ordre croissant, sont 1, 2, 3, 5, 8, 13, 21 et 34.
1. Le plus grand poids inférieur ou égal à 50 est 34. Le reste vaut 50 − 34 = 16.
2. Le plus grand poids inférieur ou égal à 16 est 13. Le nouveau reste vaut 16 − 13 = 3.
3. On retient 3, puis le reste devient nul. La décomposition obtenue est 50 = 34 + 13 + 3.
4. Sous les poids 1, 2, 3, 5, 8, 13, 21, 34, on écrit respectivement 0, 0, 1, 0, 0, 1, 0, 1. La partie significative est donc 00100101.
5. On ajoute le bit terminal 1. Le codage de 50 est 001001011. Pour contrôler, les 1 internes redonnent 3 + 13 + 34 = 50, aucun n'est voisin d'un autre, et le seul 11 apparaît à la fin.

En pratique

Pour encoder un entier positif, on soustrait successivement le plus grand poids de Fibonacci qui ne dépasse pas le reste. Le calcul s'arrête lorsque le reste vaut zéro, puis les poids retenus deviennent des bits 1.
Pour décoder un mot, on retire son 1 terminal et on additionne les poids associés aux bits 1 restants. Dans un flux concaténé, on lit jusqu'au premier 11 : ce couple ferme le mot courant.
Ce code convient lorsque les petites valeurs sont fréquentes, car sa longueur varie avec l'entier et aucun séparateur externe n'est nécessaire. Un code à longueur fixe reste préférable si l'accès direct à chaque mot ou une taille constante prime.

À ne pas confondre

Décomposition de Zeckendorf. Elle exprime un entier comme somme de nombres de Fibonacci non consécutifs ; le codage de Fibonacci transforme cette décomposition en bits et ajoute un 1 terminal. Ainsi, 50 = 34 + 13 + 3 est une décomposition, tandis que 001001011 est le code correspondant.
Écriture binaire usuelle. Elle utilise des puissances de 2 comme poids et ne possède pas, par elle-même, le suffixe terminal 11. Le nombre 50 s'écrit 110010 en base 2, mais 001001011 en codage de Fibonacci.

Limites et pièges

Zéro. La convention décrite porte sur les entiers strictement positifs. Le mot correspondant à zéro n'est donc pas défini par cette règle ; un protocole qui doit représenter zéro doit annoncer une convention supplémentaire.
Double 1 placé trop tôt. Dans un mot valide isolé, 11 n'apparaît qu'à la fin. Si le lecteur rencontre 11, il doit arrêter le mot à ce second 1, et non continuer à lui attribuer des poids.
Deux poids consécutifs choisis. Une suite comme 011… prétend retenir 2 et 3 simultanément. Elle ne suit pas la décomposition de Zeckendorf, car 2 + 3 doit être remplacé par 5 avant de former le code.
Convention sur le début de la suite. La suite de Fibonacci contient habituellement deux termes égaux à 1, mais le codage emploie les poids 1, 2, 3, 5, … . Conserver les deux 1 détruirait l'unicité de la lecture des poids.

Pour aller plus loin

Le théorème de Zeckendorf établit l'existence et l'unicité de la décomposition qui fournit les bits du code.
La suite de Fibonacci précise la construction des poids 1, 2, 3, 5, 8, … employés pour représenter les entiers.
Continuez avec Tangente

Explorez les mathématiques autrement

Retrouvez nos magazines, podcasts et jeux pour explorer les mathématiques autrement.

Découvrir les offres