« Transformée Burrows Wheeler » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 17 : | Ligne 17 : | ||
1. On créer la matrice des rotations |
1. On créer la matrice des rotations |
||
A B R A C A D A B R A |
|||
ABRACADABRA |
|||
B R A C A D A B R A A |
|||
BRACADABRAA |
|||
R A C A D A B R A A B |
|||
RACADABRAAB |
|||
A C A D A B R A A B R |
|||
ACADABRAABR |
|||
C A D A B R A A B R A |
|||
CADABRAABRA |
|||
A D A B R A A B R A C |
|||
ADABRAABRAC |
|||
D A B R A A B R A C A |
|||
DABRAABRACA |
|||
A B R A A B R A C A D |
|||
ABRAABRACAD |
|||
B R A A B R A C A D A |
|||
BRAABRACADA |
|||
R A A B R A C A D A B |
|||
RAABRACADAB |
|||
A A B R A C A D A B R |
|||
AABRACADABR |
|||
2. On trie les lignes suivant un certain ordre. Ici, par ordre alphabétique |
2. On trie les lignes suivant un certain ordre. Ici, par ordre alphabétique |
||
A A B R A C A D A B R |
|||
AABRACADABR |
|||
A B R A A B R A C A D |
|||
ABRAABRACAD |
|||
A B R A C A D A B R A |
|||
ABRACADABRA |
|||
A C A D A B R A A B R |
|||
ACADABRAABR |
|||
A D A B R A A B R A C |
|||
ADABRAABRAC |
|||
B R A A B R A C A D A |
|||
BRAABRACADA |
|||
B R A C A D A B R A A |
|||
BRACADABRAA |
|||
C A D A B R A A B R A |
|||
CADABRAABRA |
|||
D A B R A A B R A C A |
|||
DABRAABRACA |
|||
R A A B R A C A D A B |
|||
RAABRACADAB |
|||
R A C A D A B R A A B |
|||
RACADABRAAB |
|||
3. On trouve la ligne contenant le mot initial, et on retiens sont indice I |
3. On trouve la ligne contenant le mot initial, et on retiens sont indice I |
||
A A B R A C A D A B R |
|||
AABRACADABR |
|||
A B R A A B R A C A D |
|||
ABRAABRACAD |
|||
''' |
'''A B R A C A D A B R A I=3''' |
||
A C A D A B R A A B R |
|||
ACADABRAABR |
|||
A D A B R A A B R A C |
|||
ADABRAABRAC |
|||
B R A A B R A C A D A |
|||
BRAABRACADA |
|||
B R A C A D A B R A A |
|||
BRACADABRAA |
|||
C A D A B R A A B R A |
|||
CADABRAABRA |
|||
D A B R A A B R A C A |
|||
DABRAABRACA |
|||
R A A B R A C A D A B |
|||
RAABRACADAB |
|||
R A C A D A B R A A B |
|||
RACADABRAAB |
|||
4. Pour finir cette transformée, nous devons avoir l'indice du mot initial et la dernière colone de la matrice : |
4. Pour finir cette transformée, nous devons avoir l'indice du mot initial et la dernière colone de la matrice : |
||
A A B R A C A D A B '''R''' |
|||
A B R A A B R A C A '''D''' |
|||
A B R A C A D A B R '''A''' I=3 |
|||
A C A D A B R A A B '''R''' |
|||
A D A B R A A B R A '''C''' |
|||
B R A A B R A C A D '''A''' |
|||
B R A C A D A B R A '''A''' |
|||
C A D A B R A A B R '''A''' |
|||
D A B R A A B R A C '''A''' |
|||
R A A B R A C A D A '''B''' |
|||
R A C A D A B R A A '''B''' |
|||
Le résultat est donc ''3RDARCAAAABB''. On voit que dans cette exemple, quatre ''A'' se suivent ainsi que deux ''B''. Il est facile d'imaginer que sur des séquences beaucoup plus grande, il y aura suffisament de motif redondant pour que la compression soit bonne. |
Le résultat est donc ''3RDARCAAAABB''. On voit que dans cette exemple, quatre ''A'' se suivent ainsi que deux ''B''. Il est facile d'imaginer que sur des séquences beaucoup plus grande, il y aura suffisament de motif redondant pour que la compression soit bonne. |
Version du 15 mai 2020 à 14:24
La transformée de Burrows-Wheeler (aussi appelé BWT) est la seconde étape, mais pas des moindres, de l'algorithme de compression bzip2. C'est d'ailleurs l'un des deux principaux rouages de l'algorithme d'après son auteur :
bzip2 compresses files using the Burrows-Wheeler block sorting text compression algorithm, and Huffman coding.
- Julian Seward
Utilisation
Cette transformée est utilisée pour faire apparaître des motifs redondants, ce qui aide à la compression avec l'encoding d'Huffman.
Principe de fonctionnement
La transformé de Burrows-Wheeler se construit à partir d'une matrice de permutations des lettres du mot (ou d'une séquence d'octet de façon général).
Prenons le mot ABRACADABRA. Voici les étapes à suivre :
1. On créer la matrice des rotations
A B R A C A D A B R A B R A C A D A B R A A R A C A D A B R A A B A C A D A B R A A B R C A D A B R A A B R A A D A B R A A B R A C D A B R A A B R A C A A B R A A B R A C A D B R A A B R A C A D A R A A B R A C A D A B A A B R A C A D A B R
2. On trie les lignes suivant un certain ordre. Ici, par ordre alphabétique
A A B R A C A D A B R A B R A A B R A C A D A B R A C A D A B R A A C A D A B R A A B R A D A B R A A B R A C B R A A B R A C A D A B R A C A D A B R A A C A D A B R A A B R A D A B R A A B R A C A R A A B R A C A D A B R A C A D A B R A A B
3. On trouve la ligne contenant le mot initial, et on retiens sont indice I
A A B R A C A D A B R A B R A A B R A C A D A B R A C A D A B R A I=3 A C A D A B R A A B R A D A B R A A B R A C B R A A B R A C A D A B R A C A D A B R A A C A D A B R A A B R A D A B R A A B R A C A R A A B R A C A D A B R A C A D A B R A A B
4. Pour finir cette transformée, nous devons avoir l'indice du mot initial et la dernière colone de la matrice :
A A B R A C A D A B R A B R A A B R A C A D A B R A C A D A B R A I=3 A C A D A B R A A B R A D A B R A A B R A C B R A A B R A C A D A B R A C A D A B R A A C A D A B R A A B R A D A B R A A B R A C A R A A B R A C A D A B R A C A D A B R A A B
Le résultat est donc 3RDARCAAAABB. On voit que dans cette exemple, quatre A se suivent ainsi que deux B. Il est facile d'imaginer que sur des séquences beaucoup plus grande, il y aura suffisament de motif redondant pour que la compression soit bonne.
Algorithmes
variations d'algorithme...
Implémentation naïve
grande matrice, mais limitation...
Implémentation avancé
... donc on fait autrement