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 codage zeta d'un entier naturel dépend d'un paramètre et se fait en deux étapes :
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.
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.
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 .
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 .
| 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 |