Codage de Fibonacci - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

Le codage de Fibonacci est un codage entropique utilisé essentiellement en compression de données. Il utilise les nombres de la suite de Fibonacci, dont les termes ont la particularité d'être composés de la somme des deux termes consécutifs précédents, ce qui lui confère une robustesse aux erreurs.

Le code de Fibonacci produit est un code préfixe et universel. Dans ce code, la séquence « 11 » apparaît uniquement en fin de chaque nombre encodé, et sert ainsi de délimiteur.

Principe

Codage

Pour encoder un entier X :

  1. Créer un tableau avec 2 lignes.
  2. Dans la 1re, mettre les chiffres de la suite de Fibonacci (1, 2, 3, 5, 8...) inférieurs ou égaux à X.
  3. Décomposer l'entier X en une somme d'entiers correspondant aux éléments de la 1re ligne du tableau, en employant les plus grands possibles.
  4. Dans la 2e ligne du tableau, mettre des « 1 » en dessous des éléments qui ont permis de décomposer X, « 0 » sinon.
  5. Ecrire la 2e ligne du tableau en rajoutant un « 1 » pour terminer.
Exemple 
décomposition de 50.

Les éléments de la 1re ligne du tableau sont : 1 2 3 5 8 13 21 34

50 = 34 + 13 + 3 (50 = 34 + 8 + 5 + 3 est incorrect car le 13 n'a pas été utilisé)

D'où le tableau :

Suite de Fibonacci 1 2 3 5 8 13 21 34
Présence dans la décomposition 0 0 1 0 0 1 0 1

Il reste à écrire le codage du nombre 50 : 001001011

Décodage

Pour effectuer l'opération inverse, il suffit de supprimer le "1" de fin, puis de reporter les "0" et les "1" au fur et à mesure qu'on les rencontre dans la 2ème ligne du tableau, et enfin d'effectuer la somme des éléments de la 1ère ligne comportant des "1".

Premier exemple 
Décoder le nombre 10001010011

On enlève le dernier "1" puis on reporte les "0" et les "1" restants dans le tableau suivant :

Suite de Fibonacci 1 2 3 5 8 13 21 34 55 89
Présence dans la décomposition 1 0 0 0 1 0 1 0 0 1

On effectue la somme : 1 + 8 + 21 + 89 = 119

Le code 10001010011 désigne donc l'entier 119 selon le codage de Fibonacci.

Deuxième exemple 
Décoder le nombre 1011001111

Si on enlève le dernier "1" puis que l'on reporte les "0" et les "1" restants dans le tableau de décodage, on obtient :

Suite de Fibonacci 1 2 3 5 8 13 21 34 55
Présence dans la décomposition 1 0 1 1 0 0 1 1 1

On effectue la somme : 1 + 3 + 5 + 21 + 34 + 55 = 119

Or, le codage de Fibonacci est unique, le code 1011001111 contient en réalité trois séquences codées, celles-ci sont caractérisées par la suite de deux « 1 » successifs : « 11 »

On décompose:

1 0 1 1
0 0 1 1
1 1

On enlève les '1' de la fin,

1 0 1
0 0 1
1

On les place dans le tableau et on fait les sommes :

Suite de Fibonacci 1 2 3 5 Somme
Présence dans la décomposition 1 0 1 1 + 3 = 4
Présence dans la décomposition 0 0 1 3 = 3
Présence dans la décomposition 1 1 = 1

Le code 1011001111 représente les nombres 4, 3 et 1 selon le codage de Fibonacci.

On remarquera que tous les nombres de la suite de Fibonacci sont codés selon le modèle "0[n-1 fois]11" où n est le rang du nombre dans la suite de Fibonacci.

Page générée en 0.103 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise