Outil appliquant l'algorithme de Burrows-Wheeler. La transformée de Burrows-Wheeler (BWT) est un algorithme qui maximise les répétitions de lettres dans un texte, ce qui est très utile en compression de données.
Transformée de Burrows-Wheeler - dCode
Catégorie(s) : Compression
dCode est gratuit et ses outils sont une aide précieuse dans les jeux, les maths, les énigmes, les géocaches, et les problèmes à résoudre au quotidien !
Une suggestion ? un problème ? une idée ? Écrire à dCode !
La transformée de Burrows-Wheeler (BWT) est une technique de réorganisation/réarrangement des caractères d'un message texte. Principalement utilisée en compression de données, BWT a tendance à rapprocher les caractères identiques, cette propriété est utilisée comme un pré-traitement qui permet ensuite une compression accrue (par exemple par codage RLE).
Etape 1 : lister toutes les rotations du message (décalage cyclique de la chaine de caractères)
Exemple :
DECODE |
EDECOD |
DEDECO |
ODEDEC |
CODEDE |
ECODED |
Etape 2 : trier la liste par ordre alphabétique/lexicographique
Exemple :
1 | CODEDE |
---|---|
2 | DECODE |
3 | DEDECO |
4 | ECODED |
5 | EDECOD |
6 | ODEDEC |
Etape 3 : extraire les derniers caractères de chaque ligne/rotation. Le message chiffré est constitué de ces lettres/caractères.
Exemple : Le message encodé est EEODDC
Dans la version originale de l'article décrivant BWT, une clé numérique est associée à ce message. Cette valeur clé est le rang du message original une fois la liste triée.
Exemple : La clé est 2 (DECODE, le texte original, est sur la ligne 2 du tableau).
En pratique, il est courant que la chaine se termine par un caractère spécial comme null (00) ou ETX (End of Text) ou EOF (End of File). Ce caractère/octet additionnel permet de se passer de clé car il indique la fin du message. Il est souvent représenté par le caractère $.
dCode n'accepte que les caractères ASCII, et le caractère $ n'est pas un marqueur EOF par défaut, il sera trié comme le symbole dollar (code ASCII 36.
Le décodage BWT nécessite de connaitre le message chiffré (ayant N caractères) et éventuellement un nombre clé.
Exemple : Soit le message EODC (4 caractères) et la clé 1
Etape A : initialiser un tableau vide avec N lignes et N colonnes.
Etape B : écrire le message chiffré dans la dernière colonne vide du tableau
Etape C : trier les lignes du tableau par ordre alphabétique
Répéter les étapes B et C autant de fois qu'il y a de lettres dans le message.
Exemple : Etat du tableau après chaque étape :
A | B₁ | C₁ | B₂ | C₂ | B₃ | C₃ | B₄ | C₄ | ||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
Une fois l'algorithme terminé, le message clair est situé à la ligne du tableau correspondant à la clé.
Exemple : A la ligne 1, après le dernier passage de l'algorithme, il y a le message clair CODE
Si le texte a été codé avec un caractère spécial à la fin (comme null ou EOF), alors la clé n'est pas nécessaire, car le message original (parmi toutes les rotations) est celui possédant ce caractère spécial à la fin.
La clé est en fait peu importante pour du texte intelligible car lors du déchiffrement toutes les lignes du tableau final sont en fait des rotations du texte original.
Si un caractère spécial, comme null ou EOF, a été ajouté à la fin du texte avant le codage, il n'est pas nécessaire d'utiliser une clé pour décoder. Le message original peut être identifié directement : c'est celui, parmi toutes les rotations possibles, qui se termine par ce caractère spécial.
dCode propose de calculer la clé la plus probable automatiquement quand le texte est en Français.
La clé BWT est calculée automatiquement et ne peut pas être choisie.
Le message codé a tendance a avoir des suites de lettres identiques qui sont répétées, ce qui facilite leur compression (via des algorithmes comme Run Length Encoding - RLE).
Le message a un nombre important de caractères répétés et un indice de coincidence normal.
Le message est parfois surcodé avec un codage de type RLE.
BWT peut être utilisé sans clé, mais dans ce cas, la connaissance d'un caractère unique du texte original et sa position est nécessaire, comme le caractère EOF ou null placé en dernière position.
Plusieurs implémentations sont possibles mais les meilleures sont en O(n) pour la durée et O(n log(σ) (voire mieux) pour la mémoire. Avec n la taille en entrée et σ la taille de l'alphabet.
Burrows-Wheeler Transform a été inventé en 1994 par Michael Burrows et David Wheeler
dCode se réserve la propriété du code source pour "Transformée de Burrows-Wheeler". Sauf code licence open source explicite (indiqué Creative Commons / gratuit), l'algorithme pour "Transformée de Burrows-Wheeler", l'applet ou snippet (convertisseur, solveur, chiffrement / déchiffrement, encodage / décodage, encryptage / décryptage, traducteur) ou les fonctions liées à "Transformée de Burrows-Wheeler" (calculer, convertir, résoudre, décrypter / encrypter, déchiffrer / chiffrer, décoder / encoder, traduire) codés en langage informatique (Python, Java, C#, PHP, Javascript, Matlab, etc.) ou les données, en téléchargement, script, ou les accès API à "Transformée de Burrows-Wheeler" ne sont pas publics, idem pour un usage hors ligne, PC, mobile, tablette, appli iPhone ou Android !
Rappel : dCode est gratuit.
Le copier-coller de la page "Transformée de Burrows-Wheeler" ou de ses résultats est autorisée (même pour un usage commercial) tant que vous créditez dCode !
L'exportation des résultats sous forme de fichier .csv ou .txt est gratuite en cliquant sur l'icone export
Citer comme source bibliographique :
Transformée de Burrows-Wheeler sur dCode.fr [site web en ligne], consulté le 21/01/2025,