Problema resolvido na íntegra
-
A transformada de Burrows–Wheeler de "banana$" com todas as sete rotações ordenadas 5 passos
Encontre a transformação de Burrows–Wheeler de "banana$" e decida depois se algo foi comprimido. Este é o passo saída BWT: sentinela acrescentada, todas as sete rotações ordenadas, última coluna lida.
-
A sentinela é acrescentada antes de acontecer qualquer outra coisa. Como o $ se ordena antes de qualquer letra e aparece exatamente uma vez, duas rotações nunca comparam como iguais, pelo que a ordenação tem uma resposta única e não ambígua.
-
Ordenar lexicograficamente as rotações é o único trabalho realizado pela transformação. Lendo ao longo das sete linhas, note-se que a ordenação agrupou a cadeia pelo que vem depois de cada posição.
-
O último carater de uma rotação é o carater situado imediatamente antes do seu primeiro carater no original. É por isso que a ordenação produz sequências: as linhas 1 e 2 começam ambas por 'a' e terminam ambas em 'n', porque ambos esses a estão precedidos por um n em banana. A chave é o número da linha do original e, sem ela, a transformação não pode ser invertida.
-
Nada foi comprimido ainda, nem o poderia ter sido — a saída é uma permutação da entrada, os mesmos sete carateres numa ordem diferente. O que mudou foi a estrutura de sequências, e isso foi a única coisa que mudou.
-
O RLE cobra dois bytes por sequência, pelo que cinco sequências custam dez bytes face a uma entrada de sete bytes. O seu ponto de equilíbrio nunca muda: o número de sequências tem de ser inferior a metade do comprimento, o que aqui significa três ou menos.
Resposta
O painel apresenta annb$aa com key = 4, uma sequência média de 1,4 carateres, 10 bytes de RLE e uma pontuação de 0,70×. A transformação fez exatamente o que promete — elevou a sequência média em 40% sem tocar num único carater — e o pipeline continuou a perder, porque sete carateres não são texto suficiente para que esse ganho cubra dois bytes por sequência. Duplique-se a palavra e a aritmética inverte-se. "bananabanana$" tem treze carateres e a sua transformação é annnnbba$aaaa: seis sequências em vez de cinco, enquanto o comprimento quase duplicou, dando 12 bytes contra 13 e uma pontuação de 1,08×. Esse é todo o argumento a favor da BWT — a contagem de sequências é governada por quantos contextos distintos o texto tem, e não pelo seu comprimento, pelo que quanto mais longo for o bloco, melhor compensa, razão pela qual o bzip2 transforma blocos de até 900 kB em vez de palavras.
-
Percurso de aprendizagem
Compressão manual
Referências (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.