Você está na página 1de 72

UNIVERSIDADE VILA VELHA

CURSO DE CINCIA DA COMPUTAO


LUCAS GALON ARRIGONI
COMPACTAO SEM PERDA PELO MTODO
DE HUFFMAN ASSOCIADO
TRANSFORMADA DE WAVELET
VILA VELHA
Novembro/2012
LUCAS GALON ARRIGONI
COMPACTAO SEM PERDA PELO MTODO
DE HUFFMAN ASSOCIADO
TRANSFORMADA DE WAVELET
Trabalho de Concluso de Curso apresen-
tado a Universidade Vila Velha como req-
uisito parcial para a obteno do grau de
Bacharel em Cincia da Computao.
Orientador: Marcello Novas de Amorim
VILA VELHA
Novembro/2012
LUCAS GALON ARRIGONI
COMPACTAO SEM PERDA PELO MTODO
DE HUFFMAN ASSOCIADO
TRANSFORMADA DE WAVELET
BANCA EXAMINADORA
Prof. Msc. Marcello Novas de
Amorim
Universidade Vila Velha
Orientador
Prof. Msc. Alessandro
Universidade Vila Velha
Prof. Msc. Hudson Ramos
Universidade Vila Velha
Trabalho de Concluso de Curso
aprovado em 27/11/Novem-
bro/2012.
Autorizo que a UVV, sem nus, promova a publicao de minha monograa em
pgina prpria na Internet ou outro meio de divulgao de trabalho cientco.
ASSINATURAS
Prof. Msc. Marcello Novas de
Amorim
Universidade Vila Velha
Orientador
Lucas Galon Arrigoni
Universidade Vila Velha
27/11/2012
Onde no falta vontade existe sempre um caminho.
J. R. R. Tolkien
LISTA DE TABELAS
1 Conjunto binrio da tabela ASCII por codicao . . . . . . . . . . . . . 30
2 Codicao inicial de Shannon Fano . . . . . . . . . . . . . . . . . . . . 31
3 Codicao intermediria de Shannon Fano . . . . . . . . . . . . . . . . 31
4 Codicao nal de Shannon Fano . . . . . . . . . . . . . . . . . . . . . 31
5 Frequncia e o cdigo original dos smbolo . . . . . . . . . . . . . . . . 33
6 Frequncia e o cdigo codicado dos smbolo . . . . . . . . . . . . . . . 34
7 Decomposio em coecientes de aproximao e detalhes. . . . . . . . 38
8 Tabela de codicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9 Resuldos referntes aos arquivos de teste . . . . . . . . . . . . . . . . . 67
LISTA DE FIGURAS
1 Lista linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 Representao da lista contnua . . . . . . . . . . . . . . . . . . . . . . 16
3 Estrutura de um n de uma lista encadeada, onde Info o campo de
informao e Prox aponta para o prximo n da lista . . . . . . . . . . 16
4 Lista simplesmente encadeada . . . . . . . . . . . . . . . . . . . . . . . 17
5 Lista duplamente encadeada . . . . . . . . . . . . . . . . . . . . . . . . 17
6 Lista simplesmente encadeada circular . . . . . . . . . . . . . . . . . . 17
7 Lista duplamente encadeada circular . . . . . . . . . . . . . . . . . . . . 18
8 Esquema completo de uma rvore . . . . . . . . . . . . . . . . . . . . . 19
9 Representao de uma rvore binria . . . . . . . . . . . . . . . . . . . 20
10 Esquema de codicao e decodicao . . . . . . . . . . . . . . . . . 23
11 Tipos de compactao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
12 Tabela ASCII caracteres no imprimveis . . . . . . . . . . . . . . . . . 27
13 Tcnica run-length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
14 Processo de compresso Run-Length . . . . . . . . . . . . . . . . . . . 29
15 Processo de codicao de Huffman - passo a passo . . . . . . . . . . 33
16 Sequncia dos processos . . . . . . . . . . . . . . . . . . . . . . . . . . 40
17 Processo da codicao da Transformada Wavelet de Haar . . . . . . . 40
18 rvore de codicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
19 Transformao dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . 41
20 Processo da decodicao da Transformada Wavelet de Haar . . . . . 42
21 Fluxo do algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
22 Fluxo de compactao e descompactao . . . . . . . . . . . . . . . . . 44
23 Fluxo do pr-processamento . . . . . . . . . . . . . . . . . . . . . . . . 45
24 Cdigo do pr-processamento . . . . . . . . . . . . . . . . . . . . . . . 45
25 Fluxograma da Transformada Wavelet de Haar . . . . . . . . . . . . . . 46
26 Cdigo da codicao da Transformada Wavelet de Haar . . . . . . . . 47
27 Estrutura do n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
28 Caso dos smbolos repetidos. . . . . . . . . . . . . . . . . . . . . . . . . 49
29 Caso dos smbolos diferentes. . . . . . . . . . . . . . . . . . . . . . . . 49
30 Fluxograma da criao da lista de smbolos. . . . . . . . . . . . . . . . 49
31 Cdigo da criao da lista de smbolos. . . . . . . . . . . . . . . . . . . 50
32 Criao da rvore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
33 Fluxograma da criao da rvore. . . . . . . . . . . . . . . . . . . . . . 52
34 Cdigo da criao da rvore. . . . . . . . . . . . . . . . . . . . . . . . . 53
35 Fluxograma da criao da tabela codicada. . . . . . . . . . . . . . . . 54
36 Cdigo da criao da tabela codicada. . . . . . . . . . . . . . . . . . . 55
37 Fluxograma da codicao. . . . . . . . . . . . . . . . . . . . . . . . . . 57
38 Cdigo da codicao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
39 Fluxograma da reconstruo da tabela codicada. . . . . . . . . . . . . 59
40 Cdigo da reconstruo da tabela codicada. . . . . . . . . . . . . . . . 60
41 Fluxograma da reconstruo da rvore binria de decodicao . . . . 61
42 Cdigo da reconstruo da rvore binria de decodicao, parte 1 . . 62
43 Cdigo da reconstruo da rvore binria de decodicao, parte 2 . . 63
44 Cdigo de decodicao. . . . . . . . . . . . . . . . . . . . . . . . . . . 65
45 Fluxograma da decodicao da Transformada Wavelet de Haar. . . . . 66
46 Cdigo da decodicao da Transformada Wavelet de Haar. . . . . . . 66
SUMRIO
RESUMO
ABSTRACT
1 INTRODUO 12
1.1 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2 Justicativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4 Objetivos especcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 ESTRUTURA DE DADOS 15
2.1 Listas Lineares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 rvore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.1 rvore Binria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3 COMPACTADORES 21
3.1 Histrico da Compactao . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Compactao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Tipos de Compactao . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.4 Tcnicas de Compresso . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.4.1 Tcnicas com Caracteres Indicadores . . . . . . . . . . . . . . . 25
3.4.2 Compresso Estatstica . . . . . . . . . . . . . . . . . . . . . . . 30
4 A Transformada Wavelet 36
4.1 Surgimento das Wavelets . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Transformada Wavelet de Haar . . . . . . . . . . . . . . . . . . . . . . . 37
5 ALGORITMO PROPOSTO 39
5.1 Prova de Integridade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2 Caractersticas do Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3 Implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.1 Compactao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.3.2 Descompactao . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6 RESULTADOS, DISCUSSO e CONCLUSES 67
6.1 Resultados e Discusso . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.2 Concluso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7 CONCLUSO 69
8 REFERNCIAS 70
RESUMO
A compresso de dados se revela essencial para o armazenamento e transmisso.
H mtodos que, embora atinjam altas taxas de compresso, em seu procedimento re-
verso (descompactao), podem fazer com que parte dos dados presentes no arquivo
original se percam. Assim o objetivo desse estudo consiste na criao de um com-
pactador de dados sem perda, a partir da vericao da viabilidade do uso da Trans-
formada Wavelet associadas a codicao de Huffman; possibilitando a compresso
e descompresso do arquivo, mantendo a integridade dos dados sem prejudicar a sua
utilizao pelo usurio.
Palavras-Chave Compactao de dados, Wavelet, Huffman
ABSTRACT
Data compression is essential for storage and transmission. There are methods
that, although achieve high compression ratios, in its reverse procedure (decompres-
sion) can cause part of the data present in the original le are lost. Thus objective this
study is the creation of a compactor without loss of data from the verify the feasibility of
using Wavelet Transform associated with Huffman coding, enabling compression and
decompression of the le, maintaining data integrity without impairing its use by the
user.
Keywords Compression of data, Wavelet, Huffman
12
1 INTRODUO
Com o surgimento da internet, a evoluo tecnolgica cresce substancialmente, e
uma de suas caractersticas a necessidade de obter informaes em tempo hbil,
com o mnimo de espao fsico possvel.
Desse modo a reduo, compresso ou compactao de dados um recurso
muito utilizado, que permite aumentar consideravelmente a quantidade de dados a
serem gravados em um mesmo espao fsico ou at mesmo reduzir o tempo de trans-
misso desses dados, j que a velocidade da rede ainda apresenta limitao, como
ligaes telefnicas, fax e downloads.
Arquivos digitais como fotos, vdeos, livros e msicas, geram grande volume de da-
dos, tornando-se iminentes s aplicao de tcnicas para compactao de dados, que
possibilitem reduzir a quantidade de informaes necessrias, tendo como garantia a
exatido dos dados, facilitando o armazenamento, a transmisso e o processamento
dos dados.
Neste projeto ser realizado uma sucinta abordagem sobre as estruturas de da-
dos, relacionadas codicao, alm disso discorrer uma breve evoluo histrica
da codicao. Posteriormente, alguns conceitos relativos a compresso de dados
sero apresentados, especicando conceitos e denies, e incluindo demonstraes
de algumas tcnicas.
A abordagem da codicao de Huffman em conjunto com um apndice da Trans-
formada Wavelet de Haar, ter como objetivo buscar argumentos concretos da relao
entre os mesmos.
Diante disso, estima-se o desenvolvimento de uma anlise tcnico-cientca sobre
os mtodos de compresso com a nalidade de apresentar uma proposta de com-
pactao que correlacione os princpios utilizados nesse projeto.
13
1.1 Motivao
Vrias pesquisas tm sido desenvolvidos na rea de compresso de imagens uti-
lizando mtodos baseados em Wavelets
1
. Todavia, poucos trabalhos utilizam a Trans-
formada Wavelet sem perda, para arquivo do tipo texto.
Mtodos que resultam em perda de informaes no so aceitos para arquivos
texto, pois isso pode prejudicar a integridade dos mesmos.
O interesse nesta pesquisa surgiu pela possibilidade de associar a Transformada
Wavelet coma codicao de Huffman para propor uma nova tcnica de compactao.
1.2 Justicativa
Atualmente, fcil se deparar com pessoas, ou organizaes que necessitam ar-
mazenar ou transferir em seus computadores ou redes, arquivos de grande porte. En-
tretanto, mesmo que a capacidade de armazenamento e o processamento computa-
cional sejam abundantes, para os recursos j disponveis, o tempo de transferncia e
o espao sico requerido para o armazenamento so elevados. Assim, a reduo da
associao entre o tempo de transferncia e o espao fsico possibilita maior agilidade
na obteno de informaes favorecendo o desempenho tcnico. Porm, a totalidade
desses recursos ser atingida de maneira integral a partir da ausncia de perda de
dados, que resulta na preservao da integridade das informaes transmitidas. Com
isso, a implementao de um algoritmo capaz de unir esses fatores por intrmedio de
tcnicas associadas, permite ampliar a viso tcnica e computacional incentivando o
desenvolvimento de novas pesquisas.
1.3 Objetivo Geral
Criar um compactador de dados sem perda de dados, para compactar arquivos
do tipo texto, de modo que aps o procedimento, seja possvel retornar aos arquivos
originais semque ocorreamalteraes no permitindo a perda de informaes durante
o processo de compresso, j que, de acordo com a compactao sem perda, a falta
de um bit em um arquivo binrio pode comprometer todo o seu signicado.
1
Wavelet uma funo capaz de representar uma srie de dados possibilitando a anlise em difer-
entes escalas de frequncia e de tempo. [OLIVEIRA, 2007]
14
1.4 Objetivos especcos
Promover o estudo da estrutura de dados, das tcnicas, mtodos e codicaes
de compresso de dados.
Desenvolver um algoritmo de compactao sem perda, que utilize a codicao
de Huffman juntamente com a Transformada de Wavelet.
Analisar se a compactao reduziu o tamanho do arquivo.
Vericar se houve perda de dados no processo.
15
2 ESTRUTURA DE DADOS
Este captulo ser aborda uma sntese das principais estruturas de dados que so
inerentes codicao de Huffman ao qual ser utilizada neste projeto.
2.1 Listas Lineares
De acordo com Szwarcter (1994), uma estrutura de lista formada por um con-
junto de elementos, os quais se relacionam entre si. Os elementos contidos em uma
lista podem forma a combinaes de informaes, assim, [ A, 1, C ], por exemplo
representa uma lista de 3 elementos, sendo que os elementos A, 1 e C indicam as
informaes da lista. Uma estrutura de lista tambm pode ser formadas por um con-
junto de listas e sub listas, ou seja, podemos falar que [ [ A, [ B ] ] , [ C ] ] uma lista
com dois elementos.
Segundo Szwarcter (1994), as operao mais frequentes utilizadas em listas so
a incluso, excluso e busca de elementos na lista. Essas operaes, apesar de
serem simples, mostram uma grande importncia para a criao de outras operaes.
Tem-se como exemplo real as las dos caixas em um banco, onde os clientes se
organizam de forma sequencial entre o primeiro e o ltimo da la, criando assim uma
ordem de atendimento e a medida que os clientes so atendidos, os mesmos so
removidos da la.
As listas lineares so constitudas pelas seguintes regra:
Uma lista E contem n elementos (ns) tal que n >= 0
Quando n = 0, dizemos que a lista vazia.
Caso En = En-1 dizemos que En-1 antecessor a En
16
Figura 1: Lista linear
As listas podem ser armazenadas de duas formas na memria do computador,
contnua e dinmica. A representao contnua ocorre quando cada n da lista
armazenado de uma forma contnuo na memria, desde que o nmero mximo de
elementos da lista sej conhecido. Nessa representao a busca pela informao
rpida, pois conhecendo o endereo do n Ei pode-se determinar o endereo do n
Ei+1 utilizando-se um ndice, onde E a lista linear e i a posio da lista. Essas
listas, tambm chamadas de Vetores
1
ou Matrizes
2
, segundo Veloso (1991) podem
ser representadas da seguinte forma:
Figura 2: Representao da lista contnua
A alocao encadeada conhecida tambm como dinmica, tem como caracters-
tica a dinamicidade de alocar os elementos na memria na medida em que houver
necessidade, visto que os ns se encontram em posies aleatrias na memria,
porem cada n contm ponteiros que interligam uns aos outros. (Segundo Szwarcter
(1994)).
Figura 3: Estrutura de um n de uma lista encadeada, onde Info o campo de
informao e Prox aponta para o prximo n da lista
Pode-se ento representar uma lista simplesmente encadeada conforme a gura
04.
Nesta estrutura de dados podemos identicar os seguintes conceitos:
1
Em computao Vetores so variveis compostas homogneas unidimensionais, no podendo ser
confundida com a denio geomtrica do termo, pois sua semelhana de difcil percepo.
2
Matrizes so variveis compostas homogneas multidimensionais, diferenciam de vetores pelo fato
de necessitar de mais de um ndice para individualizar seus elementos.
17
Figura 4: Lista simplesmente encadeada
1. O ponteiro para o incio da lista;
2. Em cada n existem dois campos: o que contem a informao e o campo que
armazena o endereo na memria onde est alocado o prximo n.
3. No ltimo n, o campo de ligao aponta para um local de informaes nulas
(null) indicando o m da lista.
Nesta lista sempre temos um ponteiro que guarda o endereo do primeiro ele-
mento e a partir dele realizamos um percurso sequencial, sempre do incio ao m lista,
at chegarmos no ltimo elemento, que contm um valor nulo no seu campo prox.
Entretanto caso houvesse a necessidade de apontar para o n anterior, caramos
impossibilitados pelo fato de que no existe nenhum ponteiro indicando o n anterior.
Para este problema existe a lista duplamente encadeada, onde cada elemento pos-
sui dois ponteiros: um que aponta para o n anterior e outro que aponta para o seu
prximo. Observe a gura a seguir:
Figura 5: Lista duplamente encadeada
Almdessas listas h tambma lista circular, emque o seu ltimo elemento aponta
para o primeiro. As guras 06 e 07 representam esquematicamente a lista circular.
Figura 6: Lista simplesmente encadeada circular
Neste projeto de pesquisa a implementao de uma das tcnicas empregadas
(mtodo de Huffman - que ser descrita posteriormente), utilizou a estrutura de lista
18
Figura 7: Lista duplamente encadeada circular
duplamente encadeada que conforme abordado anteriormente, possibilita a insero
dinmica dos elementos e a exibilidade de obter as informaes do prximo elemento
e a do anterior. A insero dinmica tem como vantagem, abstrair a quantidade de
elementos que sero inseridos e utilizar somente o espao nescessrio para a oper-
ao. J a obteno das informaes tanto do prximo elemento quanto do anterior
favorece a busca pelas mesmas, agilizando o processo.
Outro fator que favorece o desemprenho das listas a sua criao em memria
primria, a qual tem um acesso mais rpido em comparao memria secundria
[Machado e Maia, 2007], que geralmente preferida para o armazenamento de ar-
quivos, por possuir uma maior capacidade de armazenamento de dados. Apesar
disso, a reduo do tempo gasto foi o fator de maior relevncia para a escolha da
lista, potencializado por ser do tipo duplamente encadeada.
2.2 rvore
Os mtodos os quais sero abordados posteriormente sobre os compactadores,
com particularidade em Huffman, tero uma base relevante sobre rvores.
A rvore segue a mesma idia das listas porm, segundo Pinto (1990), "Uma
rvore uma representao capaz de exprimir a relao de hierarquia existente entre
os dados, ou a relao de composio onde um conjunto de dados subordinado a
outro".
Em um exemplo de rvore, pode-se pensar em um gerente de projetos que coor-
dena uma equipe de 3 funcionrios. Seus funcionrios sero subordinados, ou pode-
se ter tambm uma rvore genealgica. Para denir uma rvore deve-se determinar
um:
19
n que pai de todos os demais denominado raiz da rvore;
e cada n subsequente so ao n pai, ir formam um outro subconjunto maior
ou igual zero (0) elementos.
O esquema de uma rvore est representado na gura 08.
Figura 8: Esquema completo de uma rvore
2.2.1 rvore Binria
As rvores binrias so especiais porque, quando ordenadas, elas conduzem s
pesquisas, inseres e excluses rpidas. Segundo Schildt (1997):
"Cada n de uma rvore consiste em ter informaes e que juntamente
contem um elo ao membro esquerdo e outro elo ao membro direito".
"...a rvore binria uma forma especial de lista encadeada. Pode-
se inserir, excluir e acessar itens em qualquer ordem. Alm disso, a
operao de recuperao no destrutiva."
20
Figura 9: Representao de uma rvore binria
A maioria das funes que usam rvores recursiva , pois as verses no recur-
sivas dessas funes so muito mais complexas.
Na construo de rvores de busca binria deve-se ter as seguintes observaes
para que dados sejam armazenados:
1 Se a rvore for vazia, o smbolo colocado na raiz;
2 Se o elemento for menor que o smbolo da raiz, ele colocado na subrvore da
esquerda, se for maior, colocado direita.
21
3 COMPACTADORES
Esse captulo apresenta um breve histrico das estratgias de compactao e
diversos mtodos, tcnicas e codicaes da compactao, relevantes para o projeto.
3.1 Histrico da Compactao
Em vrios momentos da histria, encontramos relatos de criptogrcas , Schildt
(1997) descreve que por volta de 1500 a.C. j era utilizado a escrita cifrada para
guardar segredos. Os gregos e espartanos utilizavam cdigos que os ajudavam em
movimentos blicos durante as Guerras Mdicas e do Peloponeso, tendo registro es-
crito dessa codicao em 475 a.C. Alm disso, a classe dos Patrcios Romanos uti-
lizava a encriptao simples durante o reinado de Jlio Csar.
Durante a Idade Mdia, o interesse pela criptograa diminuiu. Mesmo porque
neste perodo histrico a quantidade de pessoas que sabia ler era irrisria (exceto
entre os monges que ocasionalmente faziam uso deste modo de registro).
Com o Renascimento Italiano, a arte da criptograa novamente oresceu, sendo
aplicada s mensagens governamentais para dicultar a interpretao dos inimigos.
No sculo XIX , a inveno do telgrafo eltrico e do Cdigo Morse por Samuel F. B.
Morse abriu espao para a criptograa moderna, deixando de ser um processo alta-
mente manual. O cdigo Morse foi a primeira representao de um sistema binrio
(ponto e traos) de um alfabeto com ampla aplicabilidade. Essa representao dupla
tambm chamada de bit. Para cada bit representado, pode-se considerar uma nica
unidade lgica e para cada byte considerado um conjuto de oito (8) bits, consequen-
timente oito (8) unidades lgicas.
Na Primeira Guerra Mundial, vrias naes desenvolveram mquinas de codi-
cao mecnica que permitiram facilmente codicar e decodicar textos usando crip-
tograas sosticadas e complexas. Na Segunda Guerra Mundial a codicao das
22
mensagens passa a ser utilizada no somente para esconder a informao do inimigo,
mas tambm para reduzir a quantidade de informaes que era passada atravs dos
rdios. Ento, surge neste momento a compactao de dados relacionanda direta-
mente com a criptograa, utilizada inicialmente para ns blicos, sendo expandida
posteriormente.
Scheidcmantel (1995), evoluiu seus algoritmos e hoje eles so altamente utilizados
na proteo de informaes estratgicas das empresas e organizaes governamen-
tais detentoras de tecnologia. A compresso de dados tambm passou a ser muito
desenvolvida, pormcomo uma rea distinta. Grandes pesquisadores deixaramvrias
contribuies que evoluram os mtodos de compactao at os dias de hoje. No
demais citar nomes como Claude A. Shannon, David Huffman, Abraham Lempel, Ja-
cob Ziv e Terry Welch, dentre outros.
Neste perodo, Schildt (1997) relata que em vrios equipamentos j se encontra a
compresso de dados, que pode ser implementada em hardware, software ou atravs
do uso de um dispositivo especial de hardware que incorpore uma ou mais tcnicas
de compresso. Os primeiros entre estes componentes, foram os concentradores de
dados e os multiplexadores estatsticos, por volta dos anos 70 e incio dos anos 80.
Aproximadamente a partir da metade dos anos 80, ocorreu uma revoluo na uti-
lizao de produtos que executavam a compresso de dados nas reas de modems
de rede chaveada, armazenamento em discos usado em microcomputadores e main-
frames. Centenas de fabricantes de modem para rede chaveada incorporaram uma
variedade de algoritmos de compresso de dados em seus produtos, enquanto diver-
sos projetistas de software comercializaram produtos que aumentavam a capacidade
de armazenamento de discos ao comprimir os dados antes de armazen-los.
3.2 Compactao
Como j descrito, a criptograa uma cincia antiga que possibilitou o surgimento
da compactao de dados. Pode-se considerar que a compactao e a criptograa
so correlatos, sendo que em um algoritmo de compresso encontra-se um codi-
cador e um decodicador que aplicado sobre os dados de entrada e sada.
23
Figura 10: Esquema de codicao e decodicao
Como mostra na Figura 10, um codicador tem como entrada os dados D e que por
sua vez passa por um processo de compactao de dados, gerando em sua sada os
dados C (dados foram criptografados). O decodicador faz o trabalho inverso, recebe
como entrada os dados C e devolve como sada os dados D. O processo pode ser
feito sem perdas ou com perdas de dados. Se o processo for sem perdas o resultado
obtido ser exatamente o mesmo da entrada do codicador.
Atualmente, comum se deparar com uma situao em que se deseja armazenar
um arquivo de grande porte em algum tipo de memria, seja ela primria (memria
RAM) ou secundaria (HD). Para que se possa utilizar melhor os recursos dos disposi-
tivos, preciso minimizar de alguma forma, o espao ocupado no dispositivo utilizado.
Uma maneira para que o problema acima seja resolvido, consiste em modicar (com-
pactar) o contedo do arquivo de maneira apropriada, de tal forma que o tamanho do
arquivo que menor que o original.
Se o arquivo compactado for menor do que o original, pode-se armazenar a verso
do arquivo modicado em vez do arquivo original. Isso representaria um ganho de
memria. Geralmente uma tabela de cdigos tambm armazenada. Essa tabela de
cdigos criada de modo que seja possvel codicar ou decodicar as informaes
de um arquivo, sem que haja muitos problemas com a integridade dos dados.
O problema referido conhecido como compresso de dados. No decorrer da
histria a compresso sempre teve grande importncia, pois no incio da computao
a economia de recursos, principalmente em memria, era crtica, devido ao seu ele-
vado custo. Com o passar do tempo, esse problema no era mais o foco, entretanto,
muitos programas que so utilizados atualmente requerem o uso de grande parte da
memria. Tem-se como exemplo, programas que utilizam muitos recursos visuais,
virtualizao, ou consultas em bancos de dados.
Com isto, o problema de economia de memria ainda persiste na atualidade. Ao
contrrio do que possa parecer, compactao no somente reduzir o tamanho de
um arquivo; h vrias outras aplicaes que utilizam a compactao de dados.
24
Nos ltimos tempos as redes de computadores se tornaram comuns e a transfer-
ncia de dados pela rede se tornou cada vez mais frequente, assim o trfego pela rede
est cando cada vez mais custosa, com isso a compresso de dados se encaixaria
muito bem neste quadro, pois um nmero menor de dados a ser transmitido, implicaria
em um custo de transmisso menor.
A compactao tambm utilizada para agilizar a transmisso de dados basica-
mente de duas formas: alterando a taxa de transmisso e/ou permitindo o aumento
no nmero de computadores de uma rede. Se houver um modem que opera a 9600
bps (bits por segundo), possvel que ele transmita como se estivesse a 14400 bps;
Desde que ele permita a compresso de dados transmitidos, ampliando sua capaci-
dade de transferncia de informao. Na verdade, o modem continuar transmitindo a
uma taxa de transmisso de 9600 bps, mas a taxa de transferncia de informao es-
tar ampliada para 14400 bps. Portando, a compresso de dados permite o aumento
da taxa de transmisso de dados. [PINHEIRO, 2004]
Outra vantagem da compresso a possibilidade de expanso de uma rede de
computadores. Com a ampliao do nmero de computadores em uma rede pode
ocorrer umdesempenho no esperado devido ao aumento do trfego de dados, tornando-
se necessria uma transmisso mais rpida desses dados. H, portanto, duas al-
ternativas: trocar os equipamentos que fazem essa transmisso por modelos mais
coerentes com o cenrio, ou incorporar um algoritmo de compresso aos equipamen-
tos existentes em seus chips desde que estes permitam essa atualizao. Como a
primeira alternativa mais cara, a segunda permite que se alcance o mesmo desem-
penho comumcusto menor. A compresso de dados, neste caso, permite a ampliao
de uma rede de computadores de uma forma alternativa e mais baratas. [PINHEIRO,
2004]
3.3 Tipos de Compactao
A compresso lgica refere-se a uma estratgia para a otimizao de dados. Um
exemplo o projeto de um banco de dados utilizando sequncias de bits para a repre-
sentao de campos de dados. No lugar de sequncias de letras ou nmeros, utiliza-
se bits (que so sequncias de vrios zeros e uns que a mquina entende), reduzindo
signicativamente o espao de utilizao do banco de dados. Este tipo de compresso
possvel ser efetivada em campos projetados para representar dados constantes,
25
como datas, cdigos e quaisquer outros campos formados por nmeros. A caracters-
tica lgica da compresso encontra-se no fato de os dados j serem comprimidos no
momento do armazenamento, no ocorrendo sua transformao de dados estendidos
para comprimidos; exemplo da representao de:
01 de Abril de 2003 : 15 bytes
01 Abr 2002 : 9 bytes
01042002 : 8 bytes
A compactao fsica aquela realizada sobre dados j existentes, ao qual ver-
icado a repetio de elementos como letras, nmeros ou smbolos, para efetivar a
reduo dos mesmos. Na compresso fsica, existem dois tipos de tcnicas para
sinalizar a ocorrncia de caracteres repetidos: Um deles indica o caractere (ou con-
junto de caracteres) repetido atravs da substituio por umcaractere especial. Outras
tcnicas indicam a frequncia de repetio de caracteres e representam isto atravs
de sequncias de bits.
Figura 11: Tipos de compactao
3.4 Tcnicas de Compresso
3.4.1 Tcnicas com Caracteres Indicadores
necessrio esclarecer como so codicados os caracteres indicadores (espe-
ciais) a serem substitudos pelos caracteres repetidos na compresso fsica como
run-length, apesar de no serem um codicao to ecaz e no fazer parte do pro-
jeto, o entendimento pelo mesmo importante para entender codicaes que sero
abordadas posteriormente.
26
3.4.1.1 Codicao Run-length
O Run Length Encoding, tambm conhecido por comprimento de leira pode ser
esclarecido por Held (1992) que:
"A codicao de comprimento de leira um mtodo de compresso
de dados que reduzir, sicamente qualquer tipo de sequncia de car-
acteres repetidos, desde que a sequncia de caracteres alcance um
nvel predenido de ocorrncia. Para a situao especial onde o car-
actere nulo o caractere repetido a compresso de comprimento de
leira pode ser vista como um processo avanado de supresso de
nulos."
A Figura 15 mostra os caracteres A, B e C sendo repetidos 5 vezes, porm os
nmeros do texto poderiam ser confundidos com o nmero que indica a frequncia de
repeties. Para resolver esse problema, geralmente coloca-se um caractere que no
ocorre no texto ou um daqueles caracteres no imprimveis,como mostra na tabela
ASCII na Figura 14. Por exemplo o caractere especial STX (cdigo 00000010 binrio
na tabela ASCII) utilizado para anunciar o incio do texto do texto codicado e o
SI (cdigo 00001111 binrio na tabela ASCII) anuncia que o prximo nmero ser a
quantidade de vezes que o caractere ir se repetir. A representao da codicao
run-length est ilustrada na Figura 13.
27
Figura 12: Tabela ASCII caracteres no imprimveis
Figura 13: Tcnica run-length
28
Considerando que um caractere ocupe um byte de memria, pode-se concluir que
a codicao abordada na Figura 13 ocupa 9 bytes, em vez de 15, visto isso podemos
calcular que a taxa de compresso seria de 40% calculado pela seguinte formula:
Taxadecompresso = (1TamanhoComprimido/TamanhoOriginal)x100
Alm disso, deve-se ter em mente o modo de representar um inteiro como um
byte, pois estamos manipulando caracteres. Um byte pode ser armazenado em um
interlavo de valores entre zero (0) e 255, pois, como j foi dito anteriormente, um byte
tem 8 bits e o bit representado por sistema binrio tem como base o nmero dois,
ou seja, temos 2
8
e com isso temos 256 ocorrncias de caracteres. Visto isso, caso
ocorra mais do que isso, utiliza-se representaes mais ecientes.
Utilizando o run-length estendido o problema abordado anteriormente pode ser
facilmente resolvido, pois a diferena desta tcnica para a run-legth simples que h
um caractere especco que delimita o inicio e o m de cada sequncia de codicao.
Por exemplo:
SO R A 980 SI
No exemplo acima SO (do ingls: shift out ) representa um caractere especial in-
dicador de incio de uma sequncia de caracteres denida pelo usurio at que SI
(do ingls: shift in) seja encontrado. Esta uma propriedade de cdigos de carac-
teres, como o ASCII e EBCDIC. O caractere R indica a compresso run-length, onde
o caractere A indicado como repetido 980 vezes. Como o valor 980 ultrapassa o
limite de 256 de um byte, torna-se necessria a utilizao de mais um byte para a
representao do valor.
O algoritmo da tcnica run-length simples. Consiste nos seguinte passos:
1. Inicializa-se um contador de caracteres, destinado ao controle de cada caractere,
buscando a vericao de existncia de repetio;
2. Inicializa-se um contador de repeties do caractere procurado;
3. Faz-se leitura do caractere no arquivo a comprimir;
4. Incrementa-se o contador de caracteres;
29
5. Se o contador de caracteres for igual a 1, o caractere armazenado e volta-se
ao passo 3 para vericao de repetio;
6. Verica-se se o caractere armazenado o que procuramos; se for, incrementa-
se o contador de repeties;
7. Verica-se se o contador de repetio maior ou igual a 4 se for menor, gravam-
se os caracteres lidos no arquivo comprimido e volta-se ao passo 1;
8. Realiza-se a gravao dos caracteres indicadores no arquivo comprimido e volta-
se ao passo 1.
A Figura 14 representa uma visualizao geral do exposto acima.
Figura 14: Processo de compresso Run-Length
30
3.4.2 Compresso Estatstica
A idia realizar uma representao otimizada de caracteres ou grupos de car-
acteres. Caracteres de maior frequncia de utilizao so representados por cdigos
binrios pequenos, e os de menor frequncia so representados por cdigos propor-
cionalmente maiores. No necessrio saber qual caractere vai ser comprimido, mas
sim, conhecer a probabilidade de ocorrncia de todos os caracteres sujeitos com-
presso [PINHEIRO 2004].
Caso no seja possvel a tabulao de todos os caracteres sujeitos compresso,
utiliza-se uma tcnica para levantamento estatstico dos dados a comprimir, formando
tabelas de probabilidades [PINHEIRO, 2004].
Os mtodo que utilizam muito essa idia so a codicao de Shanno-Fano e a
de Huffman que sero descritas ao decorrer deste tpico.
3.4.2.1 Codicao de Shannon-Fano
Esse mtodo foi um dos primeiros algoritmos de compresso criado nos anos 40
por R. M. Fanno. Nessa tcnica, aplica-se nos dados de entrada um algoritmo de
compresso probabilstico que representa os caracteres mais repetidos com menos
bits que os menos repetidos [SANCHES 2001].
Em um conjunto de smbolos (ou caractere), obtm-se uma tabela de probabili-
dade de ocorrncia de cada caractere e aplica-se sobre esta tabela um procedimento
de codicao baseado na diviso de conjunto de probabilidades para a obteno do
cdigo binrio [SANCHES, 2001]. Podemos relatar da seguinte forma:
Tabela 1: Conjunto binrio da tabela ASCII por codicao
Smbolo Freq. de Ocorrncia
A 0,5
B 0,3
C 0,1
D 0,1
Aps obter a tabela de probabilidades acima, divide-a em dois grupos cuja soma
de probabilidades seja igual ou o mais prximo possvel. O primeiro grupo recebe
como primeiro valor de cdigo o valor zero e o segundo recebe um.
31
Tabela 2: Codicao inicial de Shannon Fano
Smbolo Freq. de Ocorrncia Cdigo
A 0,5 0
B 0,3 1
C 0,1 1
D 0,1 1
O procedimento repetido at chegar ao m da tabela, dividindo-a em subgrupos
de probabilidades equivalentes. Na tabela 3 o smbolo B forma o primeiro subgrupo
e os demais formam o segundo. Seguindo a regra de que o primeiro recebe zero e o
segundo recebe um.
Tabela 3: Codicao intermediria de Shannon Fano
Smbolo Freq. de Ocorrncia Cdigo
A 0,5 0
B 0,3 10
C 0,1 11
D 0,1 11
Tabela 4: Codicao nal de Shannon Fano
Smbolo Freq. de Ocorrncia Cdigo
A 0,5 0
B 0,3 10
C 0,1 110
D 0,1 111
3.4.2.2 Codicao de Huffman
Uma das tcnicas mais populares para resolver a redundncia de codicao foi
elaborada por Huffman em 1952. Por codicar individualmente os smbolos de uma
fonte de informao, tendo como resultado o menor nmero possvel de smbolos-
cdigo por smbolo-fonte [GONZALEZ, 2009].
A idia desse algoritmo parte do mesmo princpio de Shanno-Fano, codicar os
smbolos de maior frequncia com menos bits e os smbolos de menor frequncia
com mais. Basicamente, o algoritmo cria uma rvore binria, que apartir dela monta-
se uma tabela de frequncias em que cada caractere representado por um conjunto
de bits de tamanho variado.
Supe-se que um texto seja constitudo de um conjunto de smbolos (ou carac-
teres). Assim, conhecida a frequncia de cada smbolo ao longo do texto e aps isso
32
atribui-se um cdigo a cada smbolo, de modo a compactar o texto todo. A atribuda
que se coloca que nenhum cdigo seja prexo de algum outro, para que no haja
ambiguidade de cdigo.
Para cada n interno denominado v, a aresta que conduz ao lho esquerdo de
v rotulada com zero, enquanto o rtulo daquela que conduz ao direito igual a
um. Cada smbolo associado a uma folha da rvore. Os cdigos dos smbolos so
sequncias binrias, tal que essas sequncias so denidas dependendo do caminho
a ser tomando na rvore [SANCHES, 2004].
A codicao de Huffman pode ser abordada pelos seguintes passos:
1 Organizam-se os smbolos em ordem decrescente de probabilidade;
2 Agrupam-se os dois smbolos de menor probabilidade, dando origem a um novo
smbolo cuja probabilidade ser igual soma das probabilidades dos smbolos
que geraram. Uma "nova"fonte criada e a esta fonte d-se o nome de fonte
reduzida. Essa nova fonte ter um elemento a menos em relao fonte que a
gerou. Novamente, organizam-se os smbolos em ordem decrescente de proba-
bilidade de ocorrncia;
3 Continua-se executando o passo anterior, formando novas fontes reduzidas, at
que s restem dois smbolos;
4 Com os dois smbolos restantes, faz-se uma atribuio aleatria de 1 para um
dos smbolos e zero para o outro. No h necessidade de nenhuma regra nessa
atribuio, sendo a mesma feita a critrio do codicador;
5 Procede-se com o algoritmo, voltando dos smbolos nais at os smbolos da
fonte, fazendo atribuio de zeros e uns s palavras do cdigo;
6 Ao chegar nos smbolos da fonte, a codicao est pronta.
A tabela de frnquencias a seguir, um exemplo de um arquivo genrico de sm-
bolos da tabela ASCII. A partir da tabela frequncia de smbolos conforme a Tabela 5
feita a rvore de Huffman como mostra passo a passo na Figura 15.
33
Tabela 5: Frequncia e o cdigo original dos smbolo
Smbolo Freq. de Ocorrncia Cdigo ASCII
g 10 0110 0111
c 15 0110 0011
b 25 0110 0010
f 25 0110 0110
h 25 0110 1000
i 25 0110 1001
e 35 0110 0101
d 40 0110 0100
a 50 0110 0001
Figura 15: Processo de codicao de Huffman - passo a passo
34
A Tabela 6 a seguir representa a codicao referente a vore da Figura 15. Tem-
se como exemplo o cdigo do smbolo a que 01, pois a sequncia dos rtulos
das arestas, desde a raiz at a.
Tabela 6: Frequncia e o cdigo codicado dos smbolo
Smbolo Freq. de Ocorrncia Cdigo ASCII Cdigo
g 10 0110 0111 1000
c 15 0110 0011 1001
b 25 0110 0010 1110
f 25 0110 0110 1111
h 25 0110 1000 000
i 25 0110 1001 001
e 35 0110 0101 101
d 40 0110 0100 110
a 50 0110 0001 01
Observe que na tabela anterior a sequncia de cdigo foi reduzida comparada
com a tabela ASCII. Para obter a taxa de compresso, basta calcular a somatrio da
frequncia de cada smbolo ( f i), multiplicado pelo tamanho da sequncia de cdigo
(pi), que seria o caminho percorrido na rvore, conforme a seguinte formula:
TaxaCompressao =
n

i=1
f i pi
Calculando a taxa, tem-se:
Arquivo original: 10x8+15x8+...+50x8= 2000 bits
Arquivo codicado: 50x2+40x3+...+10x4 = 775 bits
Nota-se que houve uma reduo de 61,25%, uma melhoria consideravel em re-
lao ao arquivo original.
Uma vantagem da utilizao de cdigo de prexo a facilidade existente para exe-
cutar tarefas de codicao ou decodicar. Para decodicar um texto, basta percorrer
da esquerda para a direita, ao mesmo tempo em que a rvore percorrida, repetida-
mente, da raiz para as folhas. Nesse percurso, toma-se o caminho para a esquerda
ou direita, na rvore, de acordo com o dgito correspondente encontrado no texto, zero
ou um, respectivamente. Toda vez que uma folha atingida, um smbolo decodicado
foi encontrado. Nesse caso, retoma-se o processo reiniciando o percurso na rvore a
partir da raiz, para decodicar o prximo smbolo.
35
Por exemplo, dada uma sequncia 01000, signica que se deve tomar o caminho
da esquerda da raiz, j que o primeiro digito zero (0) O digito seguinte um (1), o que
conduz para a direita desse ltimo n, a folha corresponde ao smbolo a alcanada.
O texto decodicado inicia-se, por a. Retoma-se ento a raiz da rvore. O prximo
dgito na codicao um (1). O caminho a seguir so ts lhos direita da raiz,
seguido pela adio por trs zeros (000). Com isso, atinge-se a folha correspondente
a g. Assim sendo, detectou-se que o smbolo seguinte a a no texto g.
Pode-se determinar a anlise da complexidade da codicao de Huffman da
seguinte forma:
Usa-se um Heap para armazenar o peso de cada rvore e cada iterao requer
O(log n) para determinar o peso menor e inserir o novo peso.
Existem O(n) iteraes, uma para cada tem.
Conclui-se ento que a complexidade da codicao de Huffman O(n log n).
Alm da complexidade, deve-se levar em conta o custo da busca, tal que, uma
rvore T de prexo correspondente a um dado texto, em que cada smbolo si ocorre
f i vezes. Seja li o comprimento do cdigo binrio do smbolo si. explicito que cada
smbolo si contribui com f i.li unidades de custo, com isso se tem:
sim(T) =
n

i=1
f i l
i
Este valor corresponde ao custo do comprimento de caminho. Se todas as fre-
quncias so idnticas, ento T uma rvore binria completa e c(T) o com-
primento de caminho externo de T. Vale observar que a codicao de Huffman
apresenta inecincia em arquivos com uma grande quantidade de elementos distin-
tos, pois caso a rvore esteja totalmente completa e atinja o tamanho mximo, a taxa
de compresso nula.
36
4 A Transformada Wavelet
A Transformada Wavelet pode ser a chave para a compresso eciente de ima-
gens com uma mistura de reas de alta frequncia e baixa frequncia. Em contraste,
imagens com grande quantidade de informaes uniforme podem responder melhor
aos outros mtodos de compresso. Pode-se destacar a codicao de Huffman apre-
sentada na sesso 3, uma das tcnicas mais populares para resolver as redundncias.
A seguir ser descrito o surgimento das Wavelets e algumas abordagens como a
Transformada Wavelet de Haar.
4.1 Surgimento das Wavelets
No incio de 1800, o matemtico francs Joseph Fourier descobriu que qualquer
funo f peridica pode ser expressa como uma soma (possivelmente innita) de
senos e cossenos. Estas funes so representadas gracamente como ondas, razo
pela qual a expanso de Fourier de uma funo f est associada com as ondas e
revela as frequncias ocultas em f. A Expanso de Fourier tem muitas aplicaes na
engenharia, principalmente na anlise de sinais [SALOMON, 2008].
A desvantagem de Expanso de Fourier que ela no diz em que ponto no tempo
cada frequncia est ativa em um dado sinal. Portanto, diz-se que a Expanso de
Fourier oferece anlise Wavelet, que uma abordagembemsucedida a analisar de um
sinal no tempo e na frequncia. A idia fundamental por trs das wavelets analisar
uma funo ou um sinal de acordo com a escala de frequncia e tempo [SALOMON,
2008].
A Transformao de Wavelet Contnua ilustra a conexo entre a anlise tempo-
frequncia de funes contnuas e as ondas que se concentram em uma rea pe-
quena. Em aplicaes prticas, os dados so normalmente coletados como conjun-
tos de nmeros, e no como uma funo contnua, e por isso discreto. Assim, a
37
Wavelet discreta, a ferramenta utilizada na prtica, para analisar os dados digitais e
comprimi-lo [SALOMON, 2008].
Apesar de existirem vrias Transformadas Wavelet a sesso a seguir ir abordar
sobre a Transformada Wavelet de Haar, sendo que o foco do projeto.
4.2 Transformada Wavelet de Haar
A transformada de Haar, surgiu pelo trabalho feito por Alfred Haar em 1910-1912,
pelos sistemas de funes ortogonais. Sua abordagem funciona da seguinte forma,
tal que dado uma vetor com N posies, dividi-se em N/2 pares de pixels consecu-
tivos, calcula-se a mdia e a diferena de cada par, resultando em N/2 Mdias e N/2
diferenas [SALOMON, 2008].
Em seguida, repete-se este processo nas mdias (N/2 elementos) para se obter
N/4 mdias e N/4 diferenas. Isto repetido at resultar em uma mdia seguido por
N - 1 diferenas [SALOMON, 2008].
Uma seqncia unidimencional com uma resoluo de quatro pixeis, tendo val-
ores: [9 7 3 5]. Para entender como representar esta seqncia na base de Haar
computando sua Transformada Wavelet, calcula-se primeiro a mdia dos valores em
pares, obtendo os novos valores de menor resoluo da imagem: [8 4].
Claramente, um pouco da informao foi perdida neste processo de clculo da
mdia. Para recuperar os valores dos pixeis originais a partir dos valores de mdia,
precisa-se armazenar alguns coecientes de detalhes, que capturam a informao
perdida. No exemplo abordado, o 1 ser o valor de escolha para o primeiro coeciente
de detalhe, como na mdia computada tem-se 1 a menos que 9 e 1 a mais que 7. Este
nico nmero permite recuperar os primeiros dois pixeis a imagem original de quatro
pixeis. Semelhantemente, o segundo coeciente de detalhe -1, pois 4+(1) = 3 e
4(1) = 5.
Assim, a imagem original foi decomposta em uma verso de resoluo mais baixa
(dois pixeis) e um par de coecientes de detalhes. Repetindo este processo recursi-
vamente at a decomposio completa conforme tabela a seguir:
38
Tabela 7: Decomposio em coecientes de aproximao e detalhes.
Resoluo Mdia/Valores Coecientes de
Detalhamento
4 [9 7 3 5]
2 [8 4] [1 -1]
1 [6] [2]
Assim deniremos a Transformada de Wavelet de Haar unidimencional (tambm
chamada de Decomposio de Wavelet ) da imagem original de quatro pixeis com a
simples representao da mdia global da imagem original, seguido pelos coecientes
de detalhe em ordem de resoluo crescente. Para a base de Haar unidimensional, a
Transformada de Wavelet da nossa imagem original de quatro pixeis dada por: [6 2
1 -1].
Pode-se observar que o resultado obtido no exemplo acima no reduz a quan-
tidade de dados existente no arquivo, porem os valores para a representao dos
dados, so aproximados.
Computacionalmente, a Transformada Wavelet de Haar tem uma complexidade
linear, requerendo apenas O(n) operaes aritmticas. Se aplicarmos uma funo
para um sinal com n amostras ser necessrio kn operaes para alguma constante
k, ento o nmero total de operaes para computar a Transformada Wavelet ser:
kn+k
n
2
+k
n
4
+... +k
n
log
2
n
<= Kn(1+
1
2
+
1
4
+... +
1
log
2
n
) <= 2kn = O(n)
Apesar das Wavelets terem uma grande inuncia na codicao de imagens, u-
dio e vdeos, podemos tambm relacion-las a compresso de arquivos texto com os
conhecimentos adquiridos no captulo 3. Sabe-se que cada caractere representa 8
bits, com valores de 0 a 255, conforme a tabela ASCII. Com isso, pode-se converter
facilmente letras em nmeros e vice versa. Tendo isso em mente, tem-se uma corre-
lao entre os valores de uma imagem 8 bits (grayscale - escala de preto, branco e
cinza) com os valores de um caractere de um arquivo texto.
39
5 ALGORITMO PROPOSTO
O algoritmo proposto neste presente projeto surgiu a partir de pesquisas sobre
o comportamento da codicao de Huffman e da Transformada Wavelet de Haar.
O interesse sobre a codicao de Huffman se deu devido ao comportamento dos
dados observado em outros estudos quando aplicada tal codicao, visto que no
nal do processo a compactao sobre os dados do tipo texto se revelou eciente e
sem perda, tal que quanto menor for a variao dos elementos distintos, maior ser
sua taxa de compactao. [GONZALEZ, 2009]
Com o intuito de buscar outras alternativas de compactao sem perda, observou-
se que na aplicao da codicao da Transformada Wavelet de Haar, a represen-
tao do valor de cada dado tornou-se aproximado entre si. Considerando a variao
dos dados, e a representao destes atravs de valores, quanto maior for a prox-
imidade entre eles menor ser a variao dos elementos distintos. Assim, quando
houver uma maior proximidade entre os dados disponibilizados para a codicao de
Huffman, haver tambm uma maior compactao. Visto isso, surgiu a idia de asso-
ciar a codicao de Huffman com a Transformada Wavelet de Haar, no intuito obter
uma maior ecincia sobre a taxa de compactao.
5.1 Prova de Integridade
No procedimento de compactao e descompactao dos dados sem perda, a
integridade de um arquivo essencial, visto que uma entrada Z deve ser equivalente
a sua saida Z, conforme ilustrado na gura 16.
40
Figura 16: Sequncia dos processos
Oexemplo abaixo serviu como teste para a vericao de que o algoritmo proposto
manteve a integridade dos dados.
Conforme descrito no capitulo 4, quando aplicada a codicao da Transformada
Wavelet de Haar, sobre uma entrada Z, sendo esta umconjunto de elementos AAAAAAAA,
sero obtidas as mdias e diferenas entre os elementos. A gura abaixo ilustra o ex-
emplo citado.
Figura 17: Processo da codicao da Transformada Wavelet de Haar
Aps o processo da Transformada Wavelet de Haar, o resultado obtido pela mesma
uma sequncia de elementos contendo um A e sete NULL, sendo represen-
tados por 01000001 00000000 00000000 00000000 00000000 00000000 00000000
00000000 na forma binria. Em seguida criada a rvore de codicao a partir das
frequncias dos elementos, visto que ao nal da criao da mesma, o caminho da
direita sibolizar o bit 0 e o da esquerda o bit 1, conforme descrito no captulo 3.
Na gura 18, pode-se observar que os elementos passaram a ter uma nova re-
presentao, e a partir desta foi criada uma tabela de codicao (Tabela 8), com
o intuito reduzir a sequncia obtida no processo anterior e auxiliar no retrocesso da
codicao.
41
Figura 18: rvore de codicao
Tabela 8: Tabela de codicao
Elemento Frequncia Cdigo Original Cdigo Codicado
A 1 01000001 0
NULL 7 00000000 1
Assim da tabela 8, o elemento A representado por 0 e o NULL por 1. Desta
forma, a sequncia obtida no processo de codicao da Transformada Wavelet de
Haar, reduzida para o valor binrio 01111111, que na tabela ASCII representado
pelo elemento DELETE (Z).
Para provar que Z equivalente a Z, sabendo que aquele o resultado obtido
na compactao, a partir da tabela codicada (Tabela 8) tem-se que a sequncia
01111111 (DELETE), transformada por 01000001 00000000 00000000 00000000
00000000 00000000 00000000 00000000 (A NULL NULL NULL NULL NULL NULL
NULL), conforme ilustra a gura 19.
Figura 19: Transformao dos dados
Como resultado da transformao, aplicado o processo reverso da Transformada
Wavelet de Haar tambm decrito no capitulo 4 deste projeto. Por m este processo
ter um conjuto de elementos AAAAAAAA, ilutrado na gura 20.
42
Figura 20: Processo da decodicao da Transformada Wavelet de Haar
Sabendo-se que Z uma entrada AAAAAAAA e o resultado obtido por Z na
descompactao um conjunto de elementos AAAAAAAA, assim o conjunto dos
elementos de Z equivalente a Z, concluido que a premissa sobre a integridade do
algoritmo verdadeira.
5.2 Caractersticas do Algoritmo
No algoritmo utilizou-se a Codicao e Decodicao de Huffman para obter a
compactao sem perda de dados. Tambm foram utilizadas tcnicas do processa-
mento digital de imagens e modelagem matemtica, com base na ferramenta Wavelet
para decomposio dos dados. Apesar de existirem muitas transformadas Wavelet,
a escolha da Transformada Wavelet de Haar se deu devido a caractersticas como a
rapidez em que executa seus processos e a possibilidade de fazer a codicao sem
haver perdas de dados.
J a Codicao de Huffman apresenta uma grande ecincia quanto a presena
de dados redundantes, tal que o resultado obitido contm o menor nmero possvel
de smbolos com a menor representao possvel de bits. O algoritmo desenvolvido
processa um arquivo texto no formato .txt, sendo que os smbolos dentro do arquivo
devem ser restringidos a tabela ASCII.
Inicialmente o algoritmo tem duas opes: compactao e descompactao. Para
que o algoritmo compacte um arquivo texto, o usurio ter que passar por linha de
comando em que ir determinar parmetros, sendo, sequencialmente: o arquivo que
deseja compactar, o nome que o arquivo compactado ir receber, e por m a letra
43
C ou c para identicar que o algoritmo ir fazer uma compactao. J na descom-
pactao, o usurio passar pelos seguintes parmetros: o arquivo anteriormente
compactado pelo mesmo algoritmo, a tabela codicada referente ao mesmo arquivo;
e a letra D ou d, identicando que ser uma descompactao.
A Figura 21 ilustra o uxo geral do algoritmo desenvolvido.
Figura 21: Fluxo do algoritmo
5.3 Implementao
O presente tpico aborda o algoritmo criado neste projeto, subdividindo-se em dois
subitens: compactao e descompactao. Cada etapa dos subitens so interligadas,
ou seja, a sada de uma a entrada da prxima, como mostra no uxograma a seguir.
Figura 22: Fluxo de compactao e descompactao
44
5.3.1 Compactao
A seguir ser descrito todo o processo de compactao referente ao algoritmo
proposto, desde a entrada do arquivo com dados puros at a sada do arquivo com-
pactado, iniciando-se o processo com o pr-processamento at a codicao de Huff-
man. Cada subtpico ter 3 itens, entrada, sada e processo.
5.3.1.1 Pr-Processamento
Entrada: Arquivo com dados puros a ser compactado;
Sada: Dados processados;
Processo: Inicialmente o arquivo de entrada lido, posteriormente feito todos
os tipos de converses e adaptaes necessrias sobre os dados no intuito de
que a prxima etapa consiga process-los.
Figura 23: Fluxo do pr-processamento
No cdigo a seguir, o pr-processamento feito para cada dado lido no arquivo,
sendo que na leitura o mesmo convertido implicitamente, visto que a linguagem
usada no algoritmo tem suporte a tal converso.
45
Figura 24: Cdigo do pr-processamento
5.3.1.2 Transformada Wavelet de Haar
Entrada: Dados processados.
Sada: Aps esse procedimento gerado como resultado um arquivo codicado.
Processo: Utiliza-se funes matemticas da Transformada Wavelet de Haar.
Inicialmente os dados so armazenados em um vetor unidimensional, onde
aplicada a decomposio unidimensional citado no captulo 4.
Figura 25: Fluxograma da Transformada Wavelet de Haar
46
Segue o cdigo da codicao da Transformada Wavelet de Haar.
Figura 26: Cdigo da codicao da Transformada Wavelet de Haar
5.3.1.3 Codicao de Huffman
A terceira etapa a fase mais importante do algoritmo. Nela executada vrias
subetapas, que so: criao da lista de smbolos, criao da rvore binria, criao
da tabela codicada e a codicao.
A) Criao da lista de smbolos
Entrada: Arquivo compactado.
Sada: Lista duplamente encadeada.
Processo: O arquivo gerado na fase anterior lido smbolo a smbolo e a partir
de cada leitura o smbolo armazenado em uma estrutura como mostra na gura
27:
47
Figura 27: Estrutura do n.
Frequncia: Armazena a frequncia em que o smbolo aparece no arquivo;
Token: Armazena o smbolo;
Dir: Referncia do n a direita;
Esq: Referncia do n a esquerda;
Prox: Referncia do prximo n;
Ant: Referncia do n anterior.
Quando o primeiro elemento lido, por sua vez criada uma estrutura que guarda
o smbolo e sua frequncia inicialmente como um (1), caso o arquivo no tenha
acabado ainda, a leitura continua sendo feita. Em seguida, o segundo smbolo lido,
porm h dois casos para esse smbolo, caso ele seja igual ao primeiro, somente in-
crementada a frequncia da primeira estrutura referente ao smbolo, caso contrrio,
criada uma nova estrutura que armazene o novo smbolo, com frequncia inicialmente
um (1). Entretanto, essa estrutura deve ser referenciada para que no haja perda
de elementos, com isso, a primeira estrutura utiliza o ponteiro Prox para referenciar
a segunda estrutura e a mesma utiliza o ponteiro Ant para referenciar a primeira
estrutura. Percebe-se que esse procedimento a criao de uma lista duplamente
encadeada. As Figuras 28 e 29 demonstram o descrito acima.
48
Figura 28: Caso dos smbolos repetidos.
Figura 29: Caso dos smbolos diferentes.
A Figura 30 representa o uxograma do processo:
Figura 30: Fluxograma da criao da lista de smbolos.
49
Segue na gura 31 a funo da criao da lista de smbolos.
Figura 31: Cdigo da criao da lista de smbolos.
50
B) Criao da rvore
Entrada: Lista duplamente encadeada.
Sada: rvore binria.
Processo: A criao da rvore um processo que parte inicialmente da lista
criada na subetapa anterior. Antes de comear a criao, a lista ordenada em
ordem crescente. Aps isso, inicia-se o processo da seguinte forma:
1. Verica-se h mais de um elemento da lista, caso haja passa-se ao passo 2,
seno o processo interrompido;
2. Cria-se um n pai, onde seus lhos so o primeiro e segundo elemento da lista,
tal que, a frequncia do n pai a soma do primeiro e do segundo elemento;
3. Retira-se a referncia entre o primeiro e o segundo elemento da lista;
4. Atribe-se o n pai como o primeiro elemento da lista;
5. Ordene-se a lista em ordem crescente e retorna-se ao passo 1.
Na Figura 32 exemplica o processo de criao da arvore.
51
Figura 32: Criao da rvore.
Na Figura 33 ilustra o uxograma do processo da criao da rvore:
Figura 33: Fluxograma da criao da rvore.
52
Segue o apndice da criao da rvore ilustrado na gura 34.
Figura 34: Cdigo da criao da rvore.
C) Criao da tabela de Codicao
Entrada: rvore binria;
Sada: Tabela de Codicao;
Processo: Tem como objetivo criar uma tabela de codicao a partir da rvore
biria. Para que a tabela seja preenchida, inicialmente a rvore percorrida, e
para cada folha encontrada, preenchida uma linha da tabela. A tabela apre-
senta os seguintes campos:
Token: Smbolo encontrado na folha;
53
Qtd-Bit: Quantidade de bits, que representado pela quantidade de ns que
percorreu at chegar a folha;
Freq: Frequncia do smbolo encontrado na folha;
Code-Bit: Cdigo binrio, representado por zeros e uns, sendo que para cada
nvel em que a rvore desce atribudo um valor zero (0) caso a rvore for para
a direita e um (1) caso a rvore v para a esquerda.
Segue abaixo o uxograma do processo ilustrado na Figura 35:
Figura 35: Fluxograma da criao da tabela codicada.
54
O cdigo da tabela codicada, ilustrado na gura 36, foi criado com base na re-
cursividade, sendo que para cada recurso, o caminho da rvore percorrido para
direita ou para a esquerda, at chegar a uma folha. Ao chegar folha, o elemento
encontrado preenchido na tabela com os dados obtidos no caminho da rvore.
Figura 36: Cdigo da criao da tabela codicada
55
D) Codicao
Entrada: Tabela Codicada e o arquivo compactado pela transformada;
Sada: Arquivo compactado, arquivo com a tabela codicada;
Processo: Essa a fase em que os dados do arquivo de entrada so transfor-
mados em representaes menores, a partir da tabela de codicao criada na
etapa anterior.
A codicao feita a partir dos seguintes passos:
1. L-se um smbolo no arquivo de entrada, caso no tenha mais smbolos no ar-
quivo, passa-se ao passo 5, caso contrrio passa-se ao passo 2.
2. Procura-se o smbolo na tabela.
3. Atribue-se ao buffer o Code-Bit, bit por bit, caso o buffer chegue a seu limite
passa-se ao passo 4, Caso contrrio, mantm-se a distribuio do Code-Bit ao
buffer. Quando o Code-Bit acabar, retorna-se ao passo 1.
4. Escreva-se no arquivo de sada o buffer.
5. Armazena-se em um arquivo a tabela codicada e nalize-se o processo.
Segue abaixo o uxograma do processo ilustrado na Figura 37:
56
Figura 37: Fluxograma da codicao.
57
Aps este processo, a etapa de compactao termina por completo e tem como
sada um arquivo binrio com os dados compactados e uma tabela codicada para
que seja possvel a recuperao dos dados originrios.
A seguir um apndice do cdigo da codicao:
Figura 38: Cdigo da codicao.
58
5.3.2 Descompactao
Nos prximos subitens ser abordado todo o processo de descompactao desde
a entrada do arquivo compactado at a sada do arquivo com dados puros.
5.3.2.1 Decodicao de Huffman
A decodicao de Huffman a etapa que tem como entrada, um arquivo com-
pactado gerado pelo algoritmo e um arquivo com a tabela de codicao referente ao
arquivo compactado. A sada desta etapa um arquivo descompactado, porm os da-
dos desse aquivo ainda no so os orginais, e por isso devem passar posteriormente
pela decodicao da Transformada Wavelet de Haar para obter os mesmos.
Essa etapa inicialmente tem como objetivo reconstruir a tabela de codicao e a
rvore binria, para que seja possvel retroceder o processo de compactao.
A) Reconstruo da Tabela Codicada
Entrada: Arquivo com a tabela codicada;
Sada: Tabela codicada;
Processo: O arquivo de entrada com a tabela codicada lido, tal que para
cada leitura feita inserida uma linha na tabela. Quando a leitura chega ao nal
do arquivo a tabela totalmente reconstruda na memria.
Segue abaixo o uxograma da decodicao de Huffman:
Figura 39: Fluxograma da reconstruo da tabela codicada.
59
Segue abaixo o cdigo da reconstruo da tabela codicada.
Figura 40: Cdigo da reconstruo da tabela codicada.
B) Reconstruo da Arvore Binria
Entrada: Tabela codicada;
Sada: rvore binria;
Processo: Essa uma etapa muito importante no processo da decodicao,
pois a rvore binria que ir identicar os cdigos no arquivo compactado e
transform-los em smbolos.
Nesta etapa inicialmente processa-se os dados de cada linha da tabela, tal que
para cada linha processada criado um caminho na rvore, onde na folha ocorre o
armazenado do smbolo e de sua frequncia.
60
Fluxograma do processo acima est ilustrado na Figura 41:
Figura 41: Fluxograma da reconstruo da rvore binria de decodicao
O cdigo da reconstruo da rvore binria de decodicao representado pela
Figura 42 e 43.
61
Figura 42: Cdigo da reconstruo da rvore binria de decodicao, parte 1
62
Figura 43: Cdigo da reconstruo da rvore binria de decodicao, parte 2
63
C) Decodicao
Entrada: Arquivo compactado e a rvore binria;
Sada: Arquivo descompactado;
Processo: Ao implementar este processo, foi identicado uma limitao da lin-
guagem utilizada no projeto, pois a mesma no tem suporte para a identicao
de um nico bit. Com isso houve a necessidade de buscar novas alternativas,
como a mscara varivel que ser descrita ao decorrer do projeto.
O processo inicia-se fazendo vrias leituras no arquivo compactado at que ele
chegue ao seu m. Para cada leitura no arquivo, um buffer de 8 bits preenchido,
que por sua vez feita uma comparao com uma mscara varivel para que seja
identicado se o bit um ou zero.
A mscara varivel uma estratgia para a identicao do bit. Ela tem um
tamanho equivalente de 8 bits, que pode representar valores de 0 (00000000 repre-
sentao binria) a 255 (11111111 representao binria), porm na estratgia foram
utilizados somente valores na potncia de 2, como 00000001, 00000010, 00000100,
..., 10000000 na representao binria.
A mscara criada no momento em que identicado qual a posio do bit que
ser comparado. Inicialmente a mscara est zerada (00000000) e aps a identi-
cao da posio feita a seguinte operao:
M = 1x2
p
para que a posio (p) referente a mscara (M) seja preenchido com um (1). Ex-
emplicando a situao, se a posio for zero (0) a mscara seria 1000000, tendo em
vista que a posio varia de zero a sete.
Aps a criao da mscara, feito uma operao binria AND, tal que se a posio
do buffer e da mscara forem iguais, o retorno dessa operao ser um (1), caso
contrrio zero (0).
Com a identicao do bit, ser possvel agora percorrer a rvore at chegar a sua
folha e identicar assim o smbolo pelo qual ser escrito no arquivo descompactado,
tal que se o bit for identicado o caminho ser para a direita, caso contrrio ser para
a esquerda.
64
Segue a baixo o cdigo de decodicao ilustrado na gura 44.
Figura 44: Cdigo de decodicao.
5.3.2.2 Decodicao da Transformada Wavelet de Haar
Entrada: Arquivo descompactado pela decodicao de Huffman;
Sada: Arquivo descompactado com os dados originais ou puros;
Processo: Inicialmente o arquivo compactado de entrada lido, tal que cada
smbolo lido armazenado em um vetor, visto que os smbolos desse arquivo
representa as mdias e os coecientes de detalhamento. Ao chegar no nal do
arquivo, o processo de armazenamento no vetor termina e inicia-se a decodi-
cao da transformada Wavelet de Haar que o processo inverso da decom-
posio, como vimos no capitulo 4.
65
Segue abaixo o uxograma ilustradopela Figura 45:
Figura 45: Fluxograma da decodicao da Transformada Wavelet de Haar.
O cdigo da decodicao da Transformada Wavelet de Haar representado pela
Figura 46.
Figura 46: Cdigo da decodicao da Transformada Wavelet de Haar.
66
6 RESULTADOS, DISCUSSO e
CONCLUSES
6.1 Resultados e Discusso
Com objetivo de comparar o tempo e a taxa de compresso, foram utilizados 3
arquivos para a avaliao dos resultados referente ao algoritmo criado, sendo que
cada arquivo continha quantidades diferentes de elementos distintos.
A Tabela 9 ilustra os dados obtidos nos testes realizados.
Tabela 9: Resuldos referntes aos arquivos de teste
Quantidade de
elementos dis-
tintos
Tamanho Orig-
inal (KBytes)
Tamanho
Compactado
(KBytes)
Tempo (s) Taxa de Com-
presso
2 97.657 12.208 52.093615s 87.499%
4 97.657 24.415 55.654067s 74,999%
16 97.657 48.829 68.041140s 50.995%
A relao inversamente proporcional entre a nmero de elementos distintos e o
tempo gasto para a compactao, ocorreu devido ao uso da codicao de Huffman
uma vez que ela apresenta grande ecincia quando na presena de dados com
menor distino entre si, reduzindo o tamanho do arquivo e consequentemente re-
querendo menor tempo de compactao.
Na codicao de Huffman, o tamanho da rvore formada ir representar o tamanho
do cdigo formado para cada caracter. Assim, quanto maior a quatidade de smbolos
distintos, maior ser sua a representao. Com isso, a busca pela determinao exata
do smbolo levar maior tempo.
O aumento da aproximidade entre os valores dos dados, possibilitado pelo uso da
Transformada Wavelet de Haar, levou ao aumento da taxa de compresso, revelando
a ecincia das tcnincas quando em associao.
67
6.2 Concluso
Conforme os resultados apresendados, o algoritmo criado apresentou uma exce-
lente compactao dos dados, podendo atingir 87% da taxas de compresso, entre-
tanto esse valor diretamente proporcional ao tempo gasto e variao da quantidade
de elementos distintos do arquivo.
68
7 CONCLUSO
Oconhecimento de compresso de dados surgiu comas pesquisas de criptograa,
pois a compactao um esquema de codicao aplicado a uma fonte de informao
de modo que a sada seja menor que os dados originais de entrada.
Todo esse processo, mesmo fora das aplicaes computacionais, h muito tempo
faz parte do cotidiano. Mas com o advento dos computadores digitais, a compactao
de dados passou a ser obrigatria, pois houve a necessidade de se otimizar o espao
em disco e reduzir o tempo de transmisso dos dados.
Embora atualmente, os meios de armazenamento e de transmisso de dados dos
computadores contemporneos seja bastante alto, ainda faz-se necessrio o desen-
volvimento de algoritmos de compresso cada vez mais ecientes, pois o software
atual muito robusto, ocupando mais espao em disco, e as informaes por ele ma-
nipuladas demasiadamente volumosas, exigindo muito dos meio de armazenamento
e de transmisso.
A Transformada Wavelet de Haar apesar de ser eciente na compresso de im-
agem, udio e vdeo, apresenta correlao tambm com os arquivos texto, entretanto
a decomposio dos coecientes utilizado pela mesma, tem como objetivo tornar a
representao dos valores referntes aos smbolos mais prximos. J a codicao
de Huffman revela-se muito eciente para dados com uma menor quantidade de ele-
mentos ditintos, obtendo altas taxas de compresso.
Conclui-se que as tcnicas utilizadas se mostraram eciente quando associadas,
uma vez que uma complementou a outra favorecendo o desfecho pretendido nesse
projeto.
69
8 REFERNCIAS
[1] SALOMON, David. A Concise Introdution to Data Compression. Undergraduate
Topics in Computer Science. 2008.
[2] GONZALEZ, Rafael C. WOODS, Richard E. Processamento digital de imagens.
Edio 3
a
. So Paulo - SP. Editora Pearson Prentice Hall. 2009
[3] PINTO, Wilson Silva. Introduo ao desenvolvimento de algoritmos e estrutura
de dados. So Paulo-SP. Edio 6a. Editora rica Ltda. 1990 152p.
[4] SZWARCFITER, Jayme Luiz; MARKENZON, Lilian. Estruturas de dados e seus
Algoritmos. Editora LTC - Livros Tcnicos e Cientcos. Rio de Janeiro - RJ. 1994.20-
79p.
[5] INTERNET, GRAPS, Amara, Historical Perspective [online] 1995 - 2004 [Disponvel
na Internet] htt p : //www.amara.com/IEEEwave/IW
h
istory.html
[6] SCHILDT, Herbert. Borland C++ Completo e Total. Trad Jeremias Ren Descartes
Pereira dos Santos. Editora Makron Boocks. So Paulo-SP. 1997. 1114p.
[7] INTERNET, PINHEIRO, Jos Mauricio Santos, Tcnicas de Compactao e
Compresso [online] 2004 [Disponvel na Internet]
[8] INTERNET, SANCHES, Ademir Martinez. Um estudo de compactao de da-
dos, com a implementao do mtodo de LZW [online] 2001 [Disponvel na Internet]
www.comp.uems.br/trab/pf c/downloads/20011.pd f
[9] MULLER, Daniel Nehme. Compresso de dados, [on line] 2000 [citado em 18
06 01] Disponvel na Internet:< http://www.ulbra.tche.br/ danielnm/ed/E/polE.html >
[10] TENENBAUM, Aeron M.; LANGSAM, Yedidyah; AUGENSTEIN ,Moshe J.; Es-
truturas de Dados Usando C. Trad Teresa Cristina Flix de Souza. Edio 1. Editora
Makron Books do Brasil Editora Ltda. So Paulo-SP 1995 884p.
[11] Internet, Wikipdia [Diponvel na Internet] htt p : //pt.wikipedia.org/wiki/ASCII
70
[12] VELLOSO, Paulo. Estruturas de Dados. Rio de Janeiro: Ed. Campus, 1991
[13] OLIVEIRA, Hlio Magalhes. ANALISE DE FOURIER E WAVELETS: sinais
estacionrios e no estacionrios. 1 ed. [S.l.]: Editora universitria UFPE, 2007. 342
p.

Você também pode gostar