Você está na página 1de 4

Organização de arquivos para desempenho Compressão de dados

 A compressão de dados envolve a


 técnicas de compressão  como organizar codificação da informação de modo que o
arquivos de modo que fiquem menores. arquivo tome menos espaço.
 técnicas de compactação  como recuperar  Algumas técnicas de compressão são
espaço não utilizado em arquivos. gerais, e outras específicas para certos
 ordenação  como reorganizar arquivos para tipos de dados, tais como voz, imagem ou
suportar pesquisa binária. texto.
 como criar uma estrutura externa para acessar  A variedade de técnicas é enorme, de
o arquivo. forma que veremos apenas alguns
exemplos.

1 2

Compressão de dados Técnicas de Compressão de dados


Redução de Redundância
Porque desejamos tornar os arquivos menores?  A técnica denominada redução de redundância, busca uma
 ocupam menos espaço, ficando mais baratos; forma mais compacta de armazenar o dado.
 Campos de tamanho fixo, tais como CEP, número de telefone
 podem ser transmitidos mais rapidamente (menor tempo de e estado são bons candidatos à compressão através dessa
acesso), ou transmitidos no mesmo intervalo de tempo com técnica
taxas menores de transmissão ; Exemplo: No Brasil são 26 estados e 1 distrito federal.
Quantos bits são necessário para armazenar esse campo?
 podem ser processados seqüencialmente de modo mais Resposta: apenas 4 bits (o no. 27 é=1111)
rápido;
 Custos da técnica de redução de redundância:
 usando uma codificação binária pura o arquivo não mais
é legível (por humanos)
 existe o tempo de codificação/decodificação associado
(mais lento)
 existe o software de codificação/decodificação associado
(mais complexo)
3 4

Técnicas de Compressão de dados Técnicas de Compressão de dados


Redução de Redundância Omissão de seqüências repetidas
Considerados os custos, vale a pena?
É preciso analisar no contexto de cada aplicação.
 Bom para arquivo no qual a seqüência do mesmo byte
pode ser freqüente.
 se o arquivo é pequeno, acessado freqüentemente por
 Considere uma imagem do céu que foi processada de
software variados, ou parte dos software não puder utilizar
forma que apenas os objetos com um brilho acima de um
dados binários (por exemplo, um editor), esta forma de
certo valor são identificados e mantidos, e todos os
compressão não é uma boa idéia.
demais foram setados para uma cor de fundo
 se o arquivo tem vários milhões de registros, acessados representada por um valor de pixel igual a 0 (digamos,
normalmente por um único programa, provavelmente é uma preto).
excelente idéia.
 1 pixel é representado por 8 bits
 os algoritmos relacionados são geralmente muito simples e
 O fundo é representado pelo pixel de valor 0
consomem pouco tempo.
 A idéia é evitar repetição
 A técnica de compressão run-length encoding (RLE) é
utilizada para omissão de seqüências repetidas
5 6
Técnicas de Compressão de dados Técnicas de Compressão de dados
Omissão de seqüências repetidas Omissão de seqüências repetidas
técnica de compressão run-length encoding (RLE) Exemplo da técnica de compressão RLE
Aplicações que envolvem matriz esparsa são boas
candidatas ao uso dessa técnica, que funciona da seguinte Como ficaria a seqüência abaixo, se o byte especial é ff ?
maneira:
22 23 24 24 24 24 24 24 24 25 26 26 26 26 26 26 25
 Inicialmente, escolhe-se um valor de byte especial, que não
ocorre no arquivo. Esse byte será usado para indicar que, a
seguir, vem um código RLE. Resposta: 22 23 ff 24 07 25 ff 26 06 25
 A seguir, executa-se o algoritmo RLE, como segue:
 leia a seqüência, copiando seqüencialmente os valores para
um arquivo destino, exceto quando o mesmo valor ocorre
mais de uma vez sucessivamente.
 quando dois ou mais valores iguais ocorrem em seqüência,
substitua-os pelos seguintes 3 bytes:
1. o byte especial que indica RLE
2. o valor que se repete
3. o número de vezes que o valor repete
7 8

Técnicas de Compressão de dados - Huffman Técnicas de Compressão de dados - Huffman


• Modelo estatístico de distribuição de símbolos do texto a Exemplo: SANDRA DE SA Caractere E N R D /b S A

codificar Tabela de prioridades Freq 1 1 1 2 2 2 3

• Utiliza uma estrutura de árvore binária  gera código binário 1


• A codificação depende da freqüência com que um caracter
R:1 D:2 /b:2 S:2 2 A:3 Caractere R D /b S A
ocorre num conjunto de dados
Freq 1 2 2 2 2 3
• Propriedades da árvore de Huffman: E:1 N:1
• Todo nó interno tem 2 filhos
• A menores frequências estão mais distantes da raiz 2 /b:2 S:2 2 A:3 3
• As duas menores freqüências são irmãs Caractere /b S A
E:1 N:1 R:1 D:2 Freq 2 2 2 3 3
Exemplo: Considere um arquivo contendo: SANDRA DE SA

Letra S A N D R E /b 3 2 A:3 3 4 Caractere A


Freqüência 2 3 1 2 1 1 2
Freq 2 3 3 4
Código E:1 N:1 R:1 D:2 /b:2 S:2
9 10

Compressão de Dados- Huffman (cont) Caractere A


Compressão de Dados- Código de Huffman
Freq 2 3 3 4

4 3 4 5
Para obtenção do código atribuir rótulo 0 (zero) para cada aresta que
R:1 D:2 /b:2 S:2 2 A:3 Caractere conduz ao filho esquerdo de um nó interno esquerdo de cada filho e 1 (um)
Freq 3 4 5 para cada aresta que conduz ao filho direito
E:1 N:1 Percorrer as arestas para obter o código correspondente a cada caracter.
7 Caractere E N R D /b S A
5 5
Freq 1 1 1 2 2 2 3

2 A:3 3 4 12 código 000 001 100 101 110 111 01


Caractere
0 1
Freq 5 7
E:1 N:1 R:1 D:2 /b:2 S:2
5 7
0 1 0 1
6 12
2 A:3
5 7 3 4
0 1 1 1
0 0
2 A:3 3 4 E:1 N:1
Caractere R:1 D:2 /b:2 S:2
Freq 12
E:1 N:1 R:1 D:2 /b:2 S:2 11 12
Compressão de Dados- Código de Huffman Compressão de Dados- Huffman
 Propriedade:O número de bits requerido para codificar o arquivo
Algorítmo para codificação
minimizado é dado por B(T).
1- determinar da freqüência de cada caractere
 Calcular  B(T) = ∑ f(c) . dt (c) onde
2- criar uma lista de prioridades pela ordem crescente de freqüência. Cada nó será
B(T) é o n. de bits necessários para codif. o arquivo correspondente à árvore T
f(c) é a freqüência do caractere e uma raiz de árvore binária com um símbolo e freqüência correspondente.
dt(c) é o tamanho do código do caractere 3- Retire da lista de prioridades os dois primeiros nós e inclua como filhos direito e
esquerdo de um nó de agregação, que não corresponde a nenhum caractere,
 A árvore de Huffman é construída para garantir que B(T) seja mínimo. mas cuja freqüência de ocorrência seja igual à soma das freqüências de seus
No nosso exemplo: filhos.
4- Inclua na lista de prioridades o nó de agregação (mantendo a ordem)
Caractere E N R D /b S A
5-Repita os passos 3 e 4 até que a lista de prioridades contenha um só nó, que é a
Freq 1 1 1 2 2 2 3 raiz da árvore de Huffman.
código 000 001 100 101 110 111 01 6- Atribua rótulo 0 à aresta que conduz ao filho esquerdo e 1 para a aresta que
B(T)= 1x3 + 1x3 + 1x3 + 2x3 + 2x3 + 2x3 +3x2=33bits conduz ao filho direito.
No lugar de 12 caracteres x 8(bits) = 96 bits 7- O código de cada caractere é obtido pela trajetória da raiz até a folha da árvore.
Gere a tabela de código de cada símbolo.
n.o. médio de bits por caractere = B(T) / total de caracteres=33/12=2,7
13 14

Compressão de Dados- Huffman Compressão de Dados- Código de Huffman

Algorítmo para decodificação  usam código de Huffman


1-escolha o primeiro bit do código como o bit corrente
 pack e unpack do Unix
2-desça um nível da árvore de Huffman, as partir da raiz, de acordo com o
valor do bit corrente (0  filho esquerdo ou 1  filho direito) e faça o
 Na construção da árvore de Huffman não especificamos como proceder
bit corrente igual ao próximo bit a decodificar. com os empates envolvendo uma folha e um nó interno.
3-Quando for atingida uma folha da árvore de Huffman, substituir os bits  se em todo empate a folha é escolhida para participar da
correspondentes à trajetória, pelo caractere contido nessa folha. combinação, então a árvore de Huffman tem altura mínima.
4- Repetir os passos 2 e 3 até que que o string de bits termine.  Se por outro lado, sempre um nó interno for escolhido, a árvore de
Huffman tem altura máxima.
 Na verdade, qualquer que seja a escolha levará a construção de uma
árvore de Huffman ótima.

15 16

Caractere E N R D /b S A
Compressão de Dados- Código de Huffman Huffman - Exercício 1 Freq 1 1 1 2 2 2 3

R:1 2 D:2 /b:2 S:2 A:3 A:3 4 5


 Exercício: codificar o exemplo anterior alterando a
D:2 /b:2 S:2 3
estratégia de empate. E:1 N:1

D:2 /b:2 S:2 3 A:3 R:1 2


Caractere E N R D /b S A

Freq 1 1 1 2 2 2 3 R:1 2 12 E:1 N:1

 Desenhe uma árvore de Huffman para a seguinte cadeia: E:1 N:1 5 7


PATO PATETA S:2 3
S:2 3 A:3 4 A:3 4

R:1 2 D:2 /b:2 R:1 2 D:2 /b:2

E:1 N:1 E:1 N:1

Caractere E N R D /b S A
Freq 1 1 1 2 2 2 3
17 código 0110 0111 010 110 111 00 10 18
Compressão de dados

Bibliografia:
• Introduction to Data Compression, Khalid Sayood, ed Morgan
Kaufmann, Feb/ 2000.
• http://www.data-compression.com/lossless (09/2002)
• Lossless Compression Handbook, Khalid Sayood - ed Elsevier-
Science, 2003.

19

Você também pode gostar