Compressão de dados

Livro de SW: sec.5.5, p.810-852.  Website do livro: resumo sec.5.5, slides. Veja também a página http://algs4.cs.​princeton.edu/​code/, que tem o código fonte, a API, e dados de teste de todos os programas do livro.

Esta página trata de conceitos básicos de compressão e do algoritmo de comprimento-de-carreira (run-length encoding).  O algoritmo de Huffman é discutida na página seguinte.

Resumo:

Pré-requisitos:

Introdução

Exercícios 1

  1. (SW 5.5.6)  Quantos bits são necessários para codificar N cópias do símbolo  a  (em função de N)?  Quantos bits são necessários para codificar N cópias da sequência  abc?

Regras do jogo

Considerações teóricas

Exemplo: genomas

Exercícios 2

  1. (SW 5.5.25) Código de comprimento fixo. Implemente uma classe RLE que use codificação de comprimento fixo para comprimir cadeia de bytes ASCII.  O método compress() deve começar por construir uma string alpha com todos os caracteres usados na cadeia de bytes original; essa string é usada para construir um Alphabet a ser usado no código de compressão.  A cadeia comprimida deve começar com alpha (codificação de 8 bits mais seu comprimento).  O método expand()alpha antes de executar a expansão.

Codificação de comprimento de carreira

Exercícios 3

  1. (SW 5.5.5)  Aplique o programa RunLength de codificação de comprimento de carreira ao arquivo q128x192.bin que está no website do livro. Quantos bits tem o arquivo comprimido?
  2. (SW 5.5.7a)  Mostre a codificação de uma sequência de N a's  (ou seja, aaaaaa,  etc. )  com codificação de comprimento de carreira.  Qual a taxa de compressão em função de N?
  3. (SW 5.5.8a)  Mostre a codificação de uma sequência de N repetições de ab  (ou seja, abababababab,  etc. )  com codificação de comprimento de carreira.  Qual a taxa de compressão em função de N?
  4. (SW 5.5.9a)  Estime a taxa de compressão da codificação de comprimento de carreira de uma sequência de N de caracteres ASCII aleatórios (em cada posição, todos os caracteres são igualmente prováveis).