Post on 17-Apr-2015
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira
Algoritmos para compressão de URLs no Twitter
Ronan Loschi R. Ferreira Seminário 2011
Orientador: Fabrício Benevenuto
1/28
Departamento de Computação UFOP
14 de julho de 2011
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 2/28
Estrutura:
• Introdução
• Metodologia
• Análise de complexidade
• Experimentos
• Conclusão
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 3/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Motivação:
Quantidade de informações gerada pelo uso da tecnologia:
• Bancos de dados locais;
• Banco de dados on-line (Cloud Computing)
• Google (2003) . Mais de 3,5 bilhões de páginas em seu BD;
• A Web (bilhões de páginas). Cada bilhão ocupa 10 terabytes de texto corrido;
• Um terabyte . Suficiente para armazenar o texto de um milhão de livros.
• O armazenamento e o acesso a tal quantidade de texto é um grande desafio
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 4/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Dado um alfabeto C={n(c)} e um PC=ASCII = Conjunto de Dados (texto)
O problema consiste em representar o conjunto de dados originais em menos espaço.
Formulação do problema:
Solução: Compressão de Dados.
Substituir os símbolos do conjunto de dados original por outros que possam ser representados usando um número menor de bits ou bytes.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 5/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Justificativa:
• Menos espaço de armazenamento;
• Menos tempo para:
• Ser lido do disco;• Transmitido;• Pesquisado.
• Custo computacional: em 20 anos (Patterson e Hennessy(1995)).
• Tempo de acesso a discos: praticamente constante;
• Velocidade de processamento: aumentou 2 mil vezes.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 6/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Considerações:
• Velocidade de compressão e de descompressão.
Exemplo: banco de dados textuais;
• Pesquisar diretamente no texto comprimido, em vez de descomprimir o texto.
Exemplo: Casamento de cadeias.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 7/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Objetivos:
Apresentar os métodos de compressão de Huffman (1952);
Apresentar o algoritmo de Huffman;
Analisar a complexidade do algoritmo.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 8/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Metodologia:
O método usa as probabilidades de ocorrência dos símbolos para determinar
palavras de código binário, de tamanho variável, para representar cada símbolo.
Huffman binário:
• Caractere;
• Usando palavras.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 9/28
Huffman binário usando caracteres (1952):
• Considera caracteres como símbolos;
• Usa uma tabela com o cálculo das frequências de ocorrência dos caracteres;
• Razão de compressão de 20 a 90%. Dependendo das características dos dados.
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Exemplo:
• Antes da compressão = 100 bytes;• Após a compressão = 30 bytes;
• Razão de compressão = 30%.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 10/28
• Representa de modo ótimo cada caractere:
• Atribui códigos mais curtos a símbolos com frequências altas;
• Códigos mais longos a símbolos com frequências curtas;
Huffman binário usando caracteres (1952):
• Os códigos são cadeias binárias que representam cada caractere;
• Código único, de tamanho variável, para cada símbolo diferente do texto.
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 11/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
3
Há outros métodos de representar os caracteres, por exemplo, usando um código binário de comprimento fixo.
ASCII 2 = 8 bits ;
O texto abc, possui (35 +18 + 23 )*1000 = 76.000 caracteres ou 228.000 bits.
O texto abc, possui (35 +18 + 23)*1000 = 76.000 caracteres ou 608.000 bits.
Representar o alfabeto C={abc} com 3 bits,:
Uma economia de 62,5%
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 12/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
8 bits = 76.000 caracteres ou 608.000 bits.
3 bits = 76.000 caracteres ou 228.000 bits.
Huffman = 76.000 caracteres ou 135.000 bits.
O texto abc, possui (35 *1+ 23*2 + 18*3)*1000 = 76.000 caracteres ou 135.000 bits.
Uma economia de 62,5%
Huffman binário usando caracteres:
Uma economia de 77,8%
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 13/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Custo da árvore:
C = alfabeto
c = caracteres do alfabeto
f(c) = frequência do caractere c no alfabeto C;
dt(c)= profundidade de folha ou comprimento da palavra de código em bits.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 14/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
A construção da árvore de Huffman:
• Utiliza uma abordagem gulosa;
• Um conjunto de n folhas representam os caracteres que formam o vocabulário do arquivo e suas respectivas frequências.
• A cada etapa, de forma gulosa, as duas árvores com frequências menores frequências são combinadas em uma única árvore e a soma de suas frequências é associada ao nó raiz.
• Ao final das n-1 etapas, temos a árvore de codificação ótima para o arquivo em questão;
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 15/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
A construção da árvore de Huffman:
• Seguindo o método de Huffman, as arestas da esquerda são rotuladas com o bit 0 e as arestas da direita com o bit 1;
• E para ser um código ótimo, a árvore dever estar sempre cheia, ou seja, cada nó que não é uma folha deve ter dois filhos.
• As palavras de código binário são identificados pelos rótulos das arestas que compõem o caminho da raiz até a folha que representa o caractere.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 16/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
d b c a
9 18 23 35
c a
23 35
d b
9 18
27
d b
9 18
27
c
23
50
A
35
d b
9 18
27
c
23
50
a
35
85
a)
• Alfabeto C={a,b,c,d}
•Frequências f(c) = {a=35, b=18, c=23, d=9}
A construção da árvore de Huffman:
b)
c)d)
0
0
0
1
1
1
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 17/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Compressão e Descompressão:
Por exemplo, um arquivo de 4 caracteres abcd obtemos as codificações :
Código fixo (3 bits): 000.001.010.011 com 12 bits;
Código de Huffman: 0.111.10.110 com 9 bits;
O símbolo ( . ) denota a concatenação.
db ca
db ca
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 18/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
O Algoritmo de Huffman:
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 19/28
Huffman usando palavras:
(Moura (1999); Moura, Navarro, Ziviani e Baeza-Yates, 2000; Ziviani, Moura, Navarro e Baeza-Yates, 2000)
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 20/28
Huffman usando palavras:
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 21/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
O Algoritmo de Huffman usando palavras:
Atribuído a Moffat e Katajainen (1995) e descrito em Moffat e Turpin (2002), e em [2];
Calcula os comprimentos dos códigos em vez dos códigos propriamente ditos;
A compressão atingida é a mesma, independentemente dos códigos utilizados;
Além disso é possível gerar a palavra de código binário, de uma palavra, a partir dos comprimentos dos códigos obtidos.
O mesmo é válido para os algoritmos de codificação e decodificação.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 22/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
O Algoritmo de Huffman usando palavras:
O algoritmo divide-se em três fases distintas: 1- Construção da árvore de Huffman;
2- Calculadas as profundidades dos nós internos da árvore;
3- Calculadas as profundidades dos nós folhas da árvore, a partir da profundidade dos nós internos.
As profundidades dos nós folhas são utilizados para a obtenção do código de Huffman para cada palavra.
Métodos de Huffman baseados em caracteres comprimem o texto para aproximadamente 60%, enquanto métodos de Huffman baseado em palavras comprimem o texto para valores pouco acima de 25%. [2]
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 23/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Análise de Complexidade:
Fila de prioridades Q = O(lgn)
Inicialização de Q = O(n)
O loop (executado exatamente n-1) = O(nlgn)
Desse modo, o tempo de execução total do algoritmo de Huffman, em um conjunto de n caracteres é O(nlgn). [3]
Algoritmo de Huffman usando caractere:
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 24/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Análise de Complexidade:
O algoritmo, para o Método de Huffman usando palavras, calcula os comprimentos dos códigos a partir do vetor A contendo as frequências das palavras, em ordem não crescente, a um custo O(n) em tempo e espaço.
Prioridades Q = O(n)
Inicialização de Q = O(n)
Comprimentos dos códigos = O(n) + O(n) = c*O(n)
A árvore de Huffman não é usada na prática!
Algoritmo de Huffman usando palavras:
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 25/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Experimentos:
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 26/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Conclusão:
O método de compressão de Huffman é uma boa opção;
Vantagem do Huffman Usando palavras: Melhor taxa de compressão e ordem de complexidade.
A construção da árvore de Huffman é um passo importante para a compreensão das diferentes soluções propostas.
Os experimentos realizados, embora simples, demonstram a utilidade e a vantagem de se comprimir dados com o objetivo de ganhar espaço em disco.
Este trabalho está diretamente relacionado com o tema da dissertação
Contribuição da disciplina de Projeto e Analise de Algoritmos em uma aplicação real.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 27/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Trabalhos futuros:
Embora não explorados neste artigo, outros métodos de compressão como os da família de Ziv-Lempel, podem ser pesquisados e implementados.
Implementação do método de Huffman usando palavras;
Experimentos demonstrando a pesquisa direta no texto comprimido e acesso direto a qualquer parte do texto comprimido.
UNIVERSIDADE FEDERAL DE OURO PRETO PPGCC - Programa de Pós-Graduação em Ciência da Computação
Disciplina de Projeto e Análise de Algoritmos
Ronan Loschi R. Ferreira Seminário 2011 28/28
Introdução MetodologiaAnálise de complexidadeExperimentosConclusão
Bibliografia:
[1] Wikipedia, “Compressão de dados,” 2011, http://pt.wikipedia.org/wiki/Algoritmodecompressao, Acesso em 06/06/2011.
[2] N. Ziviani, Projeto de Algoritmos com Implementações em Pascal e C, 3rd ed. Cengage Learning, 2011, iSBN: 978-85-221-1050-6.
[3] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein, Introduction to Algorithms, 3rd ed. The MIT Press, 2009, iSBN-13: 978-0-262-53305-8.
[4] D. Antoniades, I. Polakis, G. Kontaxis, E. Athanasopoulos, S. Ioannidis, E. Markatos, and T. Karagiannis, “we.b: The web of short urls,” in Int’l Conference on World Wide Web., 2011, pp. 715–724.
[5] F. Benevenuto, G. Magno, T. Rodrigues, and V. Almeida, “Detecting spammers on twitter,” in Annual Collaboration, Electronic messaging, Anti-Abuse and Spam Conference (CEAS), Redmond, Washington, USA. July, 2010, pp. 1–9.
[6] C. Grier, K. Thomas, V. Paxson, and M. Zhang, “@spam: The underground on 140 characters or less,” in ACM conference on Computer and communications security (CCS), 2010, pp. 27–37.