Le codage zeta ou codage de Boldi-Vigna est un codage entropique inventé par Paolo Boldi et Sebastiano Vigna en 2003 et utilisé essentiellement en compression de graphes.
Le code zeta produit est un code préfixe et universel.
Principe
Le codage zeta d'un entier naturel
dépend d'un paramètre
et se fait en deux étapes :
- le codage de l'exposant de la plus grande puissance de
inférieure ou égale à
avec un codage unaire ;
- le codage de la différence entre
et cette plus grande puissance avec un codage binaire tronqué.
Mathématiquement, pour coder un entier
, on code d'abord
en unaire, puis
en binaire tronqué avec un alphabet de taille
On appelle
la fonction associant à un entier naturel son code zeta paramétré par
.
Le codage zeta de paramètre 1 (utilisant la fonction
) est équivalent au codage gamma et produit exactement les mêmes codes.
Codage des entiers relatifs
Comme pour les codages gamma, delta et omega, il est possible de coder des entiers relatifs avec le codage zeta en utilisant une bijection pour transformer les nombres négatifs ou nul en nombres strictement positifs avant le codage à proprement parler.
Après le décodage, l'opération inverse doit être effectuée pour retrouver les entiers relatifs d'origine.
Longueur du code
Partie en code binaire tronqué
Le nombre
codé en binaire tronqué nécessite un alphabet de taille
. Il peut être divisé en
groupes de
symboles.
Si
bits de poids faible sont nécessairement écrits, l'indice du premier groupe peut-être tronqué à
bits de poids fort. Les
indices suivants sont exprimés avec
bits de poids fort.
Le nombre
appartient au premier groupe si :
avec
le reste de la division entière
.
Partie en code unaire
Le nombre
est codé sur
bits.
En récapitulatif, le nombre N est codé sur
bits, avec
et
définis par la division entière
.
Exemples
Représentation des premiers entiers naturels strictement positifs avec un codage zeta
Décimal
|
Binaire
|
Code gamma
|
Code zeta k = 1
|
Code zeta k = 2
|
Code zeta k = 3
|
Code zeta k = 4
|
1
|
00001
|
1
|
1
|
10
|
100
|
1000
|
2
|
00010
|
010
|
010
|
110
|
1010
|
10010
|
3
|
00011
|
011
|
011
|
111
|
1011
|
10011
|
4
|
00100
|
00100
|
00100
|
01000
|
1100
|
10100
|
5
|
00101
|
00101
|
00101
|
01001
|
1101
|
10101
|
6
|
00110
|
00110
|
00110
|
01010
|
1110
|
10110
|
7
|
00111
|
00111
|
00111
|
01011
|
1111
|
10111
|
8
|
01000
|
00010000
|
0001000
|
011000
|
0100000
|
11000
|
Voir aussi
Bibliographie
Articles connexes