Problème entièrement résolu
-
La transformée de Burrows-Wheeler de "banana$" avec les sept rotations triées 5 étapes
Trouvez la transformée de Burrows-Wheeler de « banana$ », puis déterminez si une compression a eu lieu. Il s'agit de l'étape sortie BWT : sentinelle ajoutée, les sept rotations triées, dernière colonne extraite.
-
La sentinelle est ajoutée avant toute autre opération. Comme le symbole $ se situe avant toutes les lettres dans l'ordre alphabétique et n'apparaît qu'une seule fois, deux rotations ne peuvent jamais être égales ; le tri donne donc une réponse unique et non ambiguë.
-
Trier lexicographiquement les rotations est la seule tâche effectuée par la transformée. En parcourant de haut en bas les sept lignes, on remarque que le tri a regroupé la chaîne selon ce qui vient après chaque position.
-
Le dernier caractère d'une rotation est celui qui précède immédiatement son premier caractère dans la chaîne d'origine. C'est pourquoi le tri produit des plages de répétition : les lignes 1 et 2 commencent toutes deux par 'a' et se terminent toutes deux par 'n', car chacun de ces 'a' est précédé d'un 'n' dans banana. La clé est le numéro de ligne de l'original, sans lequel la transformée ne peut être inversée.
-
Rien n'a encore été compressé, et rien ne pouvait l'être : le résultat est une permutation de l'entrée, c'est-à-dire les mêmes sept caractères dans un ordre différent. Seule la structure des plages a changé, et c'est la seule modification apportée.
-
Le codage RLE coûte deux octets par plage, ainsi cinq plages coûtent dix octets pour une entrée de sept octets. Son seuil de rentabilité ne varie pas : le nombre de plages doit être inférieur à la moitié de la longueur, ce qui signifie ici trois ou moins.
Réponse
Le panneau affiche annb$aa avec key = 4, une longueur moyenne de plage de 1,4 caractère, 10 octets en RLE et un score de 0,70×. La transformée a fait exactement ce qu'elle promet : elle a augmenté la longueur moyenne des plages de 40% sans modifier un seul caractère, mais la chaîne de traitement reste perdante, car sept caractères ne constituent pas un texte suffisant pour que ce gain compense deux octets par plage. Doublez le mot et l'arithmétique s'inverse. « bananabanana$ » compte treize caractères et sa transformée est annnnbba$aaaa : six plages au lieu de cinq alors que la longueur a presque doublé, ce qui donne 12 octets contre 13 et un score de 1,08×. C'est tout l'intérêt de la TBW : le nombre de plages dépend du nombre de contextes distincts présentés par le texte et non de sa longueur. Ainsi, plus le bloc est long, plus le traitement est avantageux, c'est pourquoi bzip2 transforme des blocs allant jusqu'à 900 kB plutôt que de simples mots.
-
Parcours
La compression à la main
Références (3)
- Insight blocks 1 and 2 — the transform itself: M. Burrows and D. J. Wheeler, "A Block-sorting Lossless Data Compression Algorithm." Digital Systems Research Center, Research Report 124, 1994.
- Insight block 3 — the aligners it turned into: B. Langmead, C. Trapnell, M. Pop and S. L. Salzberg, "Ultrafast and memory-efficient alignment of short DNA sequences to the human genome." Genome Biology 10, R25, 2009.
- And the one the block names outright: H. Li and R. Durbin, "Fast and accurate short read alignment with Burrows–Wheeler transform." Bioinformatics 25(14), 1754–1760, 2009.