COMPACTAÇÃO DE DADOS COM DETEÇÃO DE ERROS

Documentos relacionados
Árvore Binária de Busca Ótima

Compactação de Dados. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Seção 12.5 em diante.

Método Guloso. Troco mínimo. Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) junho/2012. Troco mínimo. Troco mínimo

Compactação de Dados Letícia Rodrigues Bueno

Compressão Sem Perdas: Codificações Huffman e Aritmética. Adelar da Silva Queiróz Marcelo Teixeira Thiago da Silva Sodré

2 Teoria da Informação

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Algoritmos em Strings (compressão de texto)

EXPRESSÕES RELACIONAIS

Códigos de bloco. Luis Henrique Assumpção Lolis. 1 de novembro de Luis Henrique Assumpção Lolis Códigos de bloco 1

Códigos Corretores de Erros e Cliques de Grafos

Entropia, Entropia Relativa

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Árvores Binárias. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 17/03/2015

Canais discretos sem memória e capacidade do canal

TEORIA: 60 LABORATÓRIO: 0

Complexidade de Algoritmos

UFSM-CTISM. Comunicação de Dados Aula-17

Problema de escalonamento

Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso:

PCC104 - Projeto e Análise de Algoritmos

Tarefa 06 Todos Subconjuntos

Teoria da Informação

Capítulo 2: Procedimentos e algoritmos

Árvores B Parte III. Propriedades, Remoção & Inserção Revisitada. Adaptado e Estendido dos Originais de:

Árvores Vermelho-Preto

Códigos de bloco. Instituto Federal de Santa Catarina Curso superior de tecnologia em sistemas de telecomunicação Comunicações móveis 2

Curvas Planas em Coordenadas Polares

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Aplicações de árvores/ Exercícios. 30/11 e 2/12 QuadTrees para representação de imagens e Algoritmo de Huffman para transmissão/compressão de dados

INF1010 Lista de Exercícios 2

Hashing: conceitos. Hashing

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

Aula 10: Tratabilidade

INTRODUÇÃO À TEORIA DA INFORMAÇÃO

TRANSMISSÃO DE DADOS PROTEGIDOS POR CÓDIGOS CORRETORES DE ERRO

1 bases numéricas. capítulo

Tópicos de Matemática Elementar

Teoria da Informação

Informações Importantes! INF TURMA A

Grafo planar: Definição

Definição. Árvores B Parte III. Propriedades Gerais. Propriedade (No. Mín. de Chaves) Leandro C. Cintra Maria Cristina F.

Pesquisa Linear. Adriano J. Holanda 15/3/2016

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

Estudo e implementação de heurísticas para determinação do caminho de menor custo para atender a rotas pré estabelecidas. Por: Charles Pereira

Textos de apoio às aulas práticas. Jaime Ramos, Francisco Miguel Dionísio

Algoritmos de Compressão sem Perdas

Princípios Básicos de Teoria da Informação

Aula 3 Propriedades de limites. Limites laterais.

Definição. Diremos que um número inteiro d é um divisor de outro inteiro a, se a é múltiplo de d; ou seja, se a = d c, para algum inteiro c.

Triangulação de Delauney

COM29008 LISTA DE EXERCÍCIOS #

BCC242. Auômato Finito Determinístico

Compressão de Dados. Prof. Flávio Humberto Cabral Nunes

Redes de Telecomunicações (11382)

O limite de uma função

Árvores (ordenadas) Departamento de Ciência de Computadores da FCUP MC Aula 11 1

5 Testes em Imagens. Figura 5.1: Esquema de proteção com detecção de erros LT Hamming. Imagem. Cod-Hamming SPIHT. Cod-LT. Canal.

Teoria de Linguagens 2 o semestre de 2015 Professor: Newton José Vieira Primeira Lista de Exercícios Entrega: até 16:40h de 15/9.

Cada questão da parte A vale 4 pontos e cada questão da parte B vale 10 pontos (total de pontos do nível III-fase de seleção = 60 pontos).

Efeitos da filtragem sobre sinais de onda quadrada

Aula Distância entre duas retas paralelas no espaço. Definição 1. Exemplo 1

3. Conteúdo de um vértice v é conteúdo dos filhos de v.

Cálculo Numérico Noções básicas sobre erros

OPERADORES LINEARES ESPECIAIS: CARACTERIZAÇÃO EM ESPAÇOS DE DIMENSÃO DOIS*

1 O esquema de Alamouti: Diversidade na transmissão

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Capítulo 3. A camada de enlace de dados

CÁLCULO I. 1 Concavidade. Objetivos da Aula. Aula n o 19: Concavidade. Teste da Segunda Derivada. Denir concavidade de uma função;

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

4 Casamento de Padrões

Acesso Sequencial Indexado

Análise de algoritmos

Cálculo Diferencial e Integral I

Acrescenta um bit 1 ou um bit 0 às mensagem para que o número total de bits 1 seja par

AULA A 6 ESTRUTURA DE DADOS. Compressão de dados

Equação algébrica Equação polinomial ou algébrica é toda equação na forma anxn + an 1 xn 1 + an 2 xn a 2 x 2 + a 1 x + a 0, sendo x

Redes de Computadores

Anatomia do motor de um programa de xadrez. Hugo Vinicius M. D. Santana Orientador: José Coelho de Pina

BC-0504 Natureza da Informação

Cálculo Diferencial e Integral Química Notas de Aula

4º 20/10/2003. ÍNDICE

Para simplificar a notação, também usamos denotar uma sequência usando apenas a imagem de :

Transformada de Discreta de Co senos DCT

Universidade de Pernambuco Escola Politécnica de Pernambuco

(versão preliminar) exceto possivelmente para x = a. Dizemos que o limite de f(x) quando x tende para x = a é um numero L, e escrevemos

Capítulo Equações da reta no espaço. Sejam A e B dois pontos distintos no espaço e seja r a reta que os contém. Então, P r existe t R tal que

Árvore Binária de Busca

Análise amortizada CLRS 17. Algoritmos p. 1

Derivadas Parciais Capítulo 14

Capítulo 2. Conjuntos Infinitos

Números Reais. Víctor Arturo Martínez León b + c ad + bc. b c

A inserção da chave 6 da árvore acima resulta na árvore abaixo.

Exercícios: Vetores e Matrizes

Métodos de Ordenação Parte 3

MESTRADO PROFISSIONAL EM MATEMÁTICA EM REDE NACIONAL. ENQ Gabarito

é uma proposição verdadeira. tal que: 2 n N k, Φ(n) = Φ(n + 1) é uma proposição verdadeira. com n N k, tal que:

Transcrição:

A pesquisa Operacional e os Recursos Renováveis 4 a 7 de novembro de 2003, Natal-RN COMPACTAÇÃO DE DADOS COM DETEÇÃO DE ERROS Paulo E. D. Pinto Universidade Estadual do Rio de Janeiro, RJ, Brasil. E-mail: pauloedp@ime.uerj.br Fábio Protti IM e NCE, Universidade Federal do Rio de Janeiro, RJ, Brasil. Parcialmente financiado pelo CNPq e FAPERJ. E-mail: fabiop@nce.ufrj.br Jayme L. Szwarcfiter IM, NCE e COPPE, Universidade Federal do Rio de Janeiro, RJ, Brasil. Parcialmente financiado pelo CNPq e FAPERJ. E-mail: jayme@cos.ufrj.br Resumo. Hamming [3] propôs, em 1980, as Árvores Hamming Huffman, estruturas para compactação de dados, que integrassem as vantagens da compactação de Huffman com a proteção contra ruídos de Hamming. Essas estruturas teriam a propriedade de detetar erros de 1 bit introduzidos durante a transmissão de dados compactados. Este trabalho amplia essa proposta e discute as Árvores de Deteção Ímpar(ADI), cuja propriedade básica é poder detetar qualquer número ímpar de bits espúrios introduzidos em uma mensagem. É estudado o caso especial de frequências constantes e são caracterizadas todas as ADI ótimas para essa situação, evidenciando-se o baixo preço a pagar, em relação a Huffman, pela ampliação feita. É também discutido, sem detalhar, um algoritmo para o caso de frequências quaisquer. Keywords: Árvores Hamming Huffman, Árvores de Deteção Ímpar. Abstract. Hamming [3] proposed, in 1980, the Hamming Huffman Trees, structures for data compression, which can combine the Huffman encoding with the noise protection of Hamming encoding. Those structures can detect 1 bit-errors introduced during transmission of compressed data. This work extends that proposal and discusses the ODD Detection Tress (ODT), whose basic property is to detect any odd number of wrong bits introduced in a message. It is presented the special case where the frequencies are constant and the Optimum ODT are caracterized for this situation. It is highlighted the low cost for the addition of that feature, related to Huffman. It is also discussed one algorithm to the general case. Keywords: Hamming Huffman Trees, Odd Detection Trees Introdução A compactação de dados é uma área de interesse permanente na computação e, embora já tenha tido bons resultados desde a década de 1950 [4], continua a ter uma grande dinâmica, dado o surgimento de novos enfoques a problemas antigos e a novos problemas [1], especialmente no contexto da Internet, que lida com grandes volumes de dados e onde a compactação é um imperativo econômico [1]. O mais tradicional método de compactação é o método de Huffman, que é muito eficiente, baseado em estatísticas sobre a ocorrência de símbolos ou agregado de símbolos em um conjunto de dados. Este método constrói uma árvore binária para codificação/decodificação de símbolos e cada um destes ocupa uma folha da árvore, sendo sua

codificação dada pelo caminho da raiz até a folha, em termos de bits 0 ou 1. Não é de surpreender que se encontre na literatura um grande número de novas propostas e adaptações sobre este método [2]. Uma dessas propostas aparece no excelente livro de Richard Hamming, "Coding and Information Theory" [3]. Hamming é especialmente conhecido por seus estudos sobre métodos de deteção e correção de erros em transmissão de dados. Ele propõe no livro, sem chegar a desenvolver, uma nova estrutura de dados, as Árvores Hamming-Huffman, que integre as vantagens da compactação de dados de Huffman com a deteção de erros, tarefas hoje realizadas em etapas distintas nos processos de transmissão/recepção de dados em redes. O presente trabalho baseia-se nessa idéia, discute a estrutura proposta por Hamming e apresenta e discute uma alternativa, as Árvores de Deteção Ímpar (ADI). As Árvores Hamming Huffman As Árvores Hamming-Huffman (AHH) permitiriam ter-se os benefícios da compactação de Huffman com a proteção contra ruídos de Hamming. A idéia é que a própria codificação de dados contivesse redundâncias que permitissem a deteção de determinados tipos de erro. Na proposta de Hamming, bastante modesta, todos os erros de 1 bit nas codificações, introduzidos durante a transmissão, seriam detetados na recepção. A idéia é equivalente a de proibir certas codificações que, quando presentes na recepção, indicariam o erro. De forma análoga às Árvores de Huffman, as AHH seriam árvores estritamente binárias, contendo as codificações em folhas, mas haveria a introdução de folhas de erro tal que, para cada codificação, todas as trocas de 1 bit levem a folhas de erro, no processo de decodificação. Segue o exemplo apresentado no livro citado, onde supõe-se frequências de ocorrência constantes. A Tabela 1 mostra os dados com suas codificações respectivas e, a Figura 1, a AHH correspondente. Símbolo Codificação a 000 b 0110 c 1010 d 1100 e 1111 Tabela 1: Código Hamming Huffman a b c d Figura 1. Árvore Hamming Huffman e No exemplo mostrado, os prefixos 001, 010, 0111, 100, 1011, 1101 e 1110 são prefixos proibidos e, quando ocorrerem na decodificação, indicam troca de 1 bit em dada codificação. Aparentemente a idéia das AHH não foi explorada, pois não foram encontradas referências na literatura sobre a questão, muito importante, pelo menos do ponto de vista teórico. Este trabalho baseia-se na idéia apresentada, mas mostra uma alternativa, as Árvores de Deteção Ímpar (ADI), que ampliam a proposta inicial, visando detetar não apenas 1, mas todos os erros em número ímpar que tenham sido introduzidos em uma mensagem codificada. Inicialmente vamos caracterizar os Códigos de Deteção Ímpar. Códigos de Deteção Ímpar Seja S um alfabeto finito. Uma codificação para dado elemento s S, c, é uma sequência finita de 0's e 1's associada a s. Cada 0 ou 1 é um bit da codificacão. Os bits de uma codificacão são rotulados 1, 2, 3,..., da esquerda para a direita. Um Código de Deteção Ímpar (CDI) para S é um conjunto P de codificações distintas associadas aos elementos de S, com as seguintes propriedades: 2463

a. É um código de prefixos, isto é, nenhuma codificação é prefixo de qualquer outra. Isto é necessário para se evitar ambiguidade na decodificação de mensagens. b. Na recepção e decodificação de uma mensagem, permite a deteção de um número ímpar de bits espúrios (na mensagem codificada). As seguintes propriedades de um CDI são facilmente verificáveis: 1. Em um código CDI, P, para cada par de codificações distintas c i, c j P com c i c j, existe a seguinte propriedade: c i e o segmento inicial de c j, com comprimento c i são diferentes. Isso é decorrência direta do fato d e o Código ser de prefixos. 2. Codificações de mesmo tamanho têm mesma paridade (paridade de uma codificação é a paridade do número de 1's que contém). Isto é necessário para a deteção ímpar. Essas propriedades são necessárias, mas não suficientes para garantir que um código seja CDI. Entretanto, se restringimos a segunda propriedade, adotando apenas codificações com paridade par, elas passam a ser suficientes para garantir que um código seja CDI, conforme o seguinte teorema: Teorema 1: Se, em um código P existirem as seguinte propriedades: a) para cada par de codificações distintas c i, c j P com c i c j, c i e o segmento inicial de c j com tamanho c i são diferentes. b)todas as codificações têm paridade par então P é CDI. Prova: Seja P um código com as propriedades mencionadas. A primeira condição atesta que P é um código de prefixos. A segunda atesta que a mensagem terá, inicialmente, paridade par e que só haverá reconhecimento de um caracter durante a decodificação quando tivermos segmentos de paridade par. Após a troca de um númeroos ímpar de bits espúrios, a mensagem terá sua paridade trocada para ímpar. Então, na decodificação, ainda que alguns segmentos sejam decodificados erradamente, na pior das hipóteses o último segmento terá paridade ímpar e o erro será detetado. Logo, P deteta qualquer número ímpar de bits espúrios na mensagem e, portanto, P é CDI. Dado um código CDI, P, é fácil verificar que podemos encontrar um outro, P', equivalente (também CDI e existindo uma bijeção entre os elementos de P e P', tal que os elementos correspondentes tenham mesmo tamanho). Para encontrar P', basta ordenar as codificações por tamanho e fazer um procedimento em k etapas (k é o número de diferentes tamanhos de codificações), tomando a cada passo as codificações de comprimento d i e, caso as codificações com esse comprimento tenham paridade ímpar, troca-se o bit de ordem d i em todas as codificações com comprimento igual ou superior a d i. Como consequência dessa propriedade, pode-se utilizar apenas CDI com codificações de paridade par. O problema de compactação de dados, que é o de encontrar um CDI ótimo, busca minimizar o tamanho total de uma mensagem e pode ser assim definido: Entrada: Um alfabeto S = {s 1, s 2... s n }, n > 1, e um vetor (f 1, f 2... f n ) de frequências, onde f i é um inteiro não negativo, correspondente à frequência de s i. Saída: Um CDI P para S que minimiza a função objetivo f = Σ f i d i, 1 i n, onde d i é o tamanho da codificação atribuída a s i em P. CDI e Árvores de Deteção Ímpar Quando se trabalha com códigos de prefixo, estes podem ser representados em árvores binárias, o que permite deduzir propriedades dos códigos a partir das propriedades das árvores associadas. Esta associação e o estudo das árvores resultantes são mostrados a seguir, 2464

especialmente para se caracterizar os Códigos de Deteção Ímpar Ótimos. Todos os conceitos sobre árvores binárias aquí usados estão alinhados com Szwarcfiter & Markenzon [6]. Cada CDI pode ser representado por uma árvore estritamente binária enraizada, onde existem três tipos de nós: nós internos, folhas de codificação e folhas de erro. As folhas de codificação contêm os símbolos do alfabeto. O caminho da raiz para determinada folha é equivalente à codificação atribuída ao caracter representado por essa folha, onde cada bit 0 corresponde a uma aresta para a esquerda e cada 1 a uma aresta para a direita. Folhas de erro ocorrem sempre como irmãos de folhas de codificação do último nível da árvore e, eventualmente, como irmãos de folhas de codificação de outros níveis ou de nós internos. Um exemplo de uma ADI para 5 caracteres é mostrado nas Tabela 2 e Figura 2. Símbolo Codificação a 00 b 11 a c 011 c d 101 e e 1001 d Tabela 2: Código CDI p/ 5 caracteres Fig 2. ADI para o CDI da Tabela 2 b Denominamos Árvore de Deteção Ímpar tipo I (ADI), para n codificações, a uma árvore estritamente binária com n folhas com paridade par. As folhas com paridade oposta são folhas de erro. Uma Árvore de Deteção Ímpar tipo II (ADII), para n codificações, é uma árvore resultante da troca das subárvores esquerda e direita de uma ADI, o que resulta terem todas suas codificações paridade ímpar. A partir deste ponto passaremos a caracterizar as Árvores de Deteção Ímpar Ótimas, relacionadas aos CDIs ótimos. Uma Árvore de Deteção Ímpar Ótima tipo I, (ADIO), é uma ADI correspondente a um CDI ótimo. Uma Árvore de Deteção Ímpar Ótima tipo II, (ADIIO), é uma ADI resultante da troca das subárvores esquerda e direita de uma ADIO. A figura 2 mostra uma ADIO para 5 símbolos, com frequências constantes. O problema de determinar um CDI ótimo, pode ser reformulado em termos das ADIO. Dados n símbolos com suas frequências respectivas, o problema é encontrar uma ADI que tenha Caminho Externo de Codificações Ponderado(CECP) mínimo (parcela do caminho externo ponderado de uma ADI somente considerando as folhas de codificação). Vamos definir um tipo especial de ADI. Chamamos de ADI Equilibrada uma ADI que, quando temos n > 3, a subárvore esquerda é uma ADI equilibrada contendo n/2 folhas de codificação e, a subárvore direita, uma ADII equilibrada com n/2 codificações. Para n de 1 a 3, ela contém folhas com codificação {0}, {0, 11} e {0, 11, 101}, respectivamente. Uma ADII Equilibrada é uma ADII para uma ADI equilibrada. A ADI da Figura 2 é uma ADI equilibrada para 5 codificações. Inicialmente trataremos o caso especial de ADIO para frequências constantes. ADIO para codificações com frequências constantes Um princípio básico para a determinação de ADIO com frequências iguais, n codificações, é que, neste caso, as subárvores também apresentam a propriedade de otimalidade, apenas existindo pequenas especificidades a considerar. Isto permite desenvolver um algoritmo de Programação Dinâmica eficiente para o problema, baseado na recorrência do Teorema 2, a seguir. 2465

Teorema 2: Seja S(n) o CEC de uma ADIO para n codificações. Então S(n) = = 1, para n = 1; =3, para n = 2; = n + Min{S(n-1), Min{(S(i)+S(n-i)}}, 1< i < (n-1), para n > 2 Prova: Os resultados para n = 1 e 2 são facilmente verificáveis, correspondendo aos códigos {0} e {0, 11}, respectivamente. Para n > 2, a minimização mais externa refere-se a dois casos: a) a subárvore esquerda tem 1 codificação. Neste caso, a subárvore direita tem CEC equivalente ao da ADIO para (n-1) codificações, pois esta subárvore tem que ser ótima. Temos: S(n) = 1 + (n-1) + S(n-1) = n + S(n-1) já que, à 2466

n S K min K max n S K min K max n S K min K max n S K min K max 1 1 1 1 11 43 5 5 21 102 9 10 31 169 12 15 2 3 1 1 12 48 6 6 22 108 10 11 32 176 12 16 3 6 1 1 13 54 6 6 23 114 11 11 33 183 12 16 4 10 1 1 14 60 6 7 24 120 12 12 34 190 12 17 5 14 2 2 15 66 6 7 25 127 12 12 35 197 12 17 6 18 3 3 16 72 6 8 26 134 12 13 36 204 12 18 7 23 3 3 17 78 6 8 27 141 12 13 37 211 13 18 8 28 3 4 18 84 6 9 28 148 12 14 38 218 14 19 9 33 3 4 19 90 7 9 29 155 12 14 39 225 15 19 10 38 4 5 20 96 8 10 30 162 12 15 40 232 16 20 Tabela 3: Dados de ADIO para frequências constantes O primeiro fato que pode ser comprovado é o de que as ADI equilibradas são uma solução ótima para a situação de frequências iguais. Vamos inicialmente mostrar uma fórmula fechada para S(n) quando a ADI é equilibrada e depois evidenciar que esse resultado vale para qualquer tipo de ADIO. No próximo teorema e no restante do trabalho, log n sempre refere-se à base 2. Teorema 3: Numa ADI equilibrada para n codificações, sendo S(n) o CEC, temos: S(n) = n.( log n/3 + 3) - 3.2 log n/3, se n > 2. Prova: A prova será feita por indução em n. Para n = 3, 4 e 5, os resultados da aplicação da fórmula coincidem com os da Tabela 3. Temos que analisar os casos em que n > 5. Hipótese de indução: A fórmula está correta para valores 2 < j < n. Passo de indução: Aplicando a definição e a hipótese de indução, temos: S(n) = n + S( n/2 )+ S( n/2 ) = n + n/2 ( log n/2 /3 + 3) - 3.2 log n/2 /3 log n/2 /3 + n/2 ( log n/2 /3 + 3) - 3.2 A análise pode se dividir em 2 casos: a) n é da forma n = 3.2 q-1 + 1. Neste caso: log n/3 = q; log n/2 /3 = q-1; log n/2 /3 = q-2; n/2 = 3.2 q-2 ; Então: S(n) = n + n/2 (q - 2+ 3) - 3.2 q - 2 + n/2 (q - 1 + 3) - 3.2 q - 1 = = n + ( n/2 + n/2 )(q - 1 + 3)-3.2 q - 2-3.2 q - 2-3.2 q - 1 = n.(q + 3) - 3.2 q = n.( log n/3 + 3) - 3.2 log n/3. Ou seja, o resultado também vale para n. b) n não é da forma n = 3.2 q-1 + 1. Neste caso: log n/3 = q; log n/2 /3 = q-1; log n/2 /3 = q-1; Então: S(n) = n + n/2 (q - 1 + 3) - 3.2 q - 1 + n/2 (q - 1 + 3) - 3.2 q - 1 = = n + ( n/2 + n/2 )(q - 1 + 3) - 3.2 q - 1-3.2 q - 1 = n.(q + 3) - 3.2 q log n/3 = n.( log n/3 + 3) - 3.2. Ou seja, o resultado também vale para n. Em todos os casos, o resultado continua valendo para n, o que completa a prova por indução. Os dois próximos teoremas caracterizam totalmente as ADIO, no caso de frequências constantes. Nas caracterizações supõe-se que o número de folhas de codificação da subárvore esquerda nunca seja superior ao de folhas de codificação da subárvore direita. Entretanto, sempre que esse número for superior a 1, a ADI simétrica também é uma árvore ótima. Teorema 4: ADI equilibradas são ADIO, para freqüências constantes. A prova deste teorema é feita por indução no número de codificações, usando-se a recorrência básica para uma ADIO e a fórmula para o CEC de uma ADI Equilibrada. Mostra-se que a função para o CEC da ADIO, no caso de freqüências constantes, e considerando-se que suas subárvores sejam ADI Equilibradas, é uma função não crescente para i no intervalo [3, n/2 ], onde i é o número de codificações da subárvore esquerda. Consequentemente, a função é 2467

mínima para n/2, o que implica ser a árvore uma ADIO, finalizando, assim, a indução. Consequentemente, a solução da recorrência do Teorema 2 é dada pela fórmula fechada para uma ADI equilibrada. Teorema 5: Em uma ADIO para n codificações, n > 3, freqüências constantes, o número de folhas de codificação da subárvore esquerda varia entre i min e n/2, onde i min = 3.2 log n/3-1, quando n 9.2 log n/3-1. = n - 3.2 log n/3, quando n > 9.2 log n/3-1. A prova deste teorema decorre da prova do teorema anterior, verificando-se a partir de quais valores a mesma função usada na prova permanece constante e igual ao valor para n/2, o que possibilita determinar as expressões acima. Podemos ilustrar esses resultados apresentando a Tabela 4, para uma faixa de valores de 1 a 30, que mostra as configurações ótimas de número de codificações nas subárvores esquerda/direita de uma ADIO, para cada n. Note-se que, nesta tabela, sempre se colocou o número de codificações na subárvore esquerda como não superior ao da direita. Para a maioria dos casos é possível, também, a configuração simétrica. n Configurações ótimas n Configurações ótimas n Configurações ótimas 1 1/0 11 5/6 21 9/12 10/11 2 1/1 12 6/6 22 10/12 11/11 3 1/2 13 6/7 23 11/12 4 1/3 2/2 14 6/8 7/7 24 12/12 5 2/3 15 6/9 7/8 25 12/13 6 3/3 16 6/10 7/9 8/8 26 12/14 13/13 7 3/4 17 6/11 7/10 8/9 27 12/15 13/14 8 3/5 4/4 18 6/12 7/11 8/10 9/9 28 12/16 13/15 14/14 9 3/6 4/5 19 7/12 8/11 9/10 29 12/17 13/16 14/15 10 4/6 5/5 20 8/12 9/11 10/10 30 12/18 13/17 14/16 15/15 Tabela 4: Configurações ótimas para ADIO com frequências constantes Pode-se verificar, na tabela acima, que, para os números da forma n = 3.2 q, 3.2 q +1, 3.2 q -1, q > 0 inteiro, há apenas uma configuração ótima. Isto também ocorre para n = 1, 2 e 3 codificações. A seguir vamos caracterizar as profundidades máxima e mínima de uma ADIO para frequências constantes, n codificações. É bastante intuitivo que as ADIO de profundidade mínima e máxima podem ser obtidas a partir da seguinte idéia: a) As ADIO de profundidade mínima são construídas, de forma recorrente, utilizando subárvores esquerdas com o número máximo de codificações não superior ao da direita, o que corresponde às ADI equilibradas. b) As ADIO de profundidade máxima são construídas, também de forma recorrente, utilizando subárvores esquerdas com o mínimo de codificações. Sendo D min (n) a profundidade mínima de uma ADIO para frequências constantes, n codificações e D max (n) a profundidade máxima, temos as seguintes recorrências: a) D min (n)= 1, se n=1 1+ D min ( n/2 ), se n > 1. b) D max (n)= 1, se n = 1 1+ D max (n-n min ), se n > 1, n min = número mínimo de codificações na subárvore esquerda. A Tabela 5 foi construída com as recorrências acima e os dados da Tabela 3, para os valores de 1 a 40. 2468

n D min D max n D min D max n D min D max n D min D max 1 1 1 11 5 5 21 6 6 31 6 7 2 2 2 12 5 5 22 6 6 32 6 7 3 3 3 13 5 6 23 6 6 33 7 7 4 4 4 14 5 6 24 6 6 34 7 7 5 4 4 15 5 6 25 6 7 35 7 7 6 4 4 16 5 6 26 6 7 36 7 7 7 4 5 17 6 6 27 6 7 37 7 7 8 4 5 18 6 6 28 6 7 38 7 7 9 5 5 19 6 6 29 6 7 39 7 7 10 5 5 20 6 6 30 6 7 40 7 7 Tabela 5: Profundidades mínima e máxima para ADIO com frequências constantes A seguir serão apresentadas fórmulas fechadas para D min e D max. Teorema 6: D min (n) = n, se n = 1; log n + 1, se n > 2. Prova: A prova será feita por indução em n. Usando a recorrência, obtemos: D min (1) = 1, D min (2) = 2, D min (3) = 3, o que concorda com os dados anteriores. Hipótese de indução: Para valores i inferiores a n e superiores a 1, temos D min (i) = log i + 1. Passo de indução: Então D min (n) = 1 + D min ( n/2 ) = 1 + log n/2 + 1, pois a árvore de profundidade mínima também tem que ter como subárvore direita uma subárvore de profundidade mínima e o valor usado, n/2, é o menor valor possível. Analisemos 2 possibilidades: a) n é par, n = 2k, k > 1, inteiro. Então: D min (n) = + log n/2 + 2 = log k + 2 = log 2k + 1 = log n + 1. b) n é ímpar, n = 2k+1, k > 1, inteiro. Então: D min (n) = log (2k+1)/2 + 2 = log (2k + 2)/2 + 2 = log (k+1) + 2 = log 2(k+1) + 1 = = log 2k + 1 +1 = log n + 1. Portanto, em qualquer caso, o resultado também vale para n, o que finaliza a indução. Uma primeira comparação entre esse resultado e aquele para a árvore de Huffman, cuja profundidade é dada por DH min = log n, mostra a diferença de 1 que parece confirmar a intuição da necessidade de termos 1 bit a mais no caso das ADIO, devido à obrigação de paridade. Vejamos agora a fórmula fechada para a profundidade máxima. Teorema 7: D max (n) = n, se n 2; log n/3 + 3, se n > 2. Prova: A prova será feita por indução em n. Usando a recorrência, obtemos D max (1) = 1, D max (2) = 2, D max (3) = 3, D max (4) = 4, D max (5) = 4, o que concorda com os dados anteriores. Hipótese de indução: Para valores i inferiores a n e superiores a 5, temos D max (i) = log n/3 + 3. Passo de indução: Então D max (n) = 1 + D max (n - n min ) onde (n - n min ), caracterizado anteriormente, é o número máximo de codificações que pode existir na subárvore direita e, consequentemente, a profundidade resultante é a maior possível. Analisemos 3 possibilidades, de acordo com o Teorema 5. a) n da forma n = 3.2 q < 9.2 log n/3-1, q inteiro. 2469

Neste caso n min é dado por n min = 3.2 log n/3-1, n - n min = n min = 3.2 log n/3-1, e D max (n) = 1 + log (3.2 q - 1 )/3 + 3 = log 2 q-1 + 4 = q + 3 = log n/3 + 3. b) n da forma n = 3.2 q-1 + p 9.2 log n/3-1, 1 p 3.2 q-2, p e q inteiros. Neste caso n min é dado por n min = 3.2 log n/3-1 = 3.2 q-2 ; n - n min = 3.2 q-2 + p, e D max (n) = 1 + log (3.2 q - 2 + p)/3 + 3 = log (2 q - 2 + p/3) + 4 = q - 2 + 1 + 4 = q + 3, dada a forma de p. Como log n/3 = q D max (n) = log n/3 + 3. c) n é da forma n = 3.2 q-1 + p > 9.2 log n/3-1, 3.2 q-2 < p < 3.2 q-1, p e q inteiros. Neste caso n min é dado por n min = n - 3.2 log n/3 e n - n min = 3.2 log n/3. D max (n) = 1 + log (3.2 log n/3 )/3 + 3 = log 2 log n/3 + 4 = log n/3 + 4 = log n/3-1 + 4, dada a forma de n. D max (n) = log n/3 + 3. Em todos os casos, o resultado continua válido para n, o que finaliza a indução. Podemos comparar, mais profundamente, as ADIO com as árvores de Huffman, no caso de frequências constantes. Sabemos que as árvores de Huffman são árvores estritamente binárias e completas. Considerando o Caminho Externo de uma árvore desse tipo, com n folhas, como o Caminho Externo de Codificação, também temos uma fórmula fechada, dada log n por CEC = n. log n - 2 [5]. A Tabela 6 apresenta dados de comparação entre as ADIO e as árvores de Huffman. São mostrados os CECs de cada uma delas, bem como o tamanho médio das codificações, dado por (CEC/n) e a diferença entre esses tamanhos médios, que é um parâmetro que mostra o custo adicional ao colocarmos a deteção de erros ímpares na árvore de Huffman. n CEC ADIO (a) a/n CEC Huffman(b) b/n Diferença 10 38 3,8 34 3,4 0,4 24 120 5 112 4,67 0,33 32 176 5,5 160 5 0,5 48 288 6 272 5,67 0,33 64 416 6,5 384 6 0,5 100 708 7,08 672 6,72 0,36 192 1536 8 1472 7,67 0,33 500 4732 9,46 4488 8,98 0,48 1000 10464 10,46 9976 9,98 0,48 5000 63856 12,77 61808 12,36 0,41 Tabela 6. CEC ADIO x Huffman para frequências constantes Observando a tabela, constatamos que a diferença fica abaixo de 1, que seria o valor intuitivo esperado, já comentado. Vemos que, para os dados mostrados, a diferença situa-se no intervalo [0,33, 0,5]. A seguir vamos mostrar que esse é, de fato, o intervalo onde se situa essa diferença. Teorema 8: A diferença entre os tamanhos médios de codificação entre uma ADIO e uma árvore de Huffman, frequências constantes, ambas com n codificações, n > 1, varia no intervalo [1/3, 1/2], sendo mínima para n da forma n = 3. 2 k, k inteiro e máxima para n da forma n = 2 k. Prova: Consideremos 4 casos: a) n da forma n = 2 k, k > 1. Neste caso, temos: log n = k e log n/3 = log 2 k /3 = log 2 k-2.4/3 = (k-2) + log 4/3 = k - 1. Então, a diferença entre as codificações médias é: d = (n( log n/3 + 3) - 3.2 log n /3 - (n. log n - 2 log n ))/n = (2 k (k-1+3) - 3.2 k-1 - (2 k (k+1) - 2 k ))/2 k = (2 k.k +4.2 k-1-3.2 k-1-2 k.k - 2 k + 2 k ))/2 k = 2 k-1 /2 k = 1/2. Este resultado também vale para n = 2. b) n da forma $n = 3.2 k, k 0. 2470

Neste caso, temos: log n = k + log 3 = k + 2 e log n/3 = log 3.2 k /3 = k. Então, a diferença entre as codificações médias é: d = (n( log n/3 + 3)-3.2 log n /3 -(n. log n - 2 log n ))/n = (3.2 k (k+3) - 3.2 k - (3.2 k (k+2+1) - 2 k+2 ))/3.2 k = (3.2 k.k +9.2 k - 3.2 k - 3.2 k.k - 9.2 k + 2 k+2 ))/3.2 k = (-3.2 k + 4.2 k )/3.2 k = 1/3. c) n da forma n = 2 k + p, 1 p < 2 k. Neste caso, temos: log n = k + 1, e log n/3 podendo ser = (k - 1) ou k, segundo a). c.1) Se log n/3 = (k - 1), temos: d = (n( log n/3 + 3) - 3.2 log n /3 - (n. log n - 2 log n ))/n = (n(k-1+3) - 3.2 k-1 - (n(k+1+1) - 2 k+1 ))/n = (n.k + 2n -3.2 k-1 - n.k - 2n + 2 k+1 ))/n = (-3.2 k-1 + 4.2 k-1 )/n = 2 k-1 /(2 k + p) d < 1/2, pois p 1. c.2) Se log n/3 = k, temos: d = (n( log n/3 + 3) - 3.2 log n /3 - (n. log n - 2 log n ))/n = (n(k+3) - 3.2 k - (n(k+1+1) - 2 k+1 ))/n = (n.k + 3n -3.2 k - n.k - 2n + 2 k+1 ))/n = (n -3.2 k + 2.2 k )/n = (2 k +p - 2 k )/(2 k + p) = p/(2 k + p) d < 1/2, pois p < 2 k. Então, o valor máximo da diferença, para qualquer n > 1, é 1/2. d) n da forma n = 3. 2 k + p, 1 p < 3. 2 k. Neste caso, temos: log n pode ser (k+2) ou (k + 3), segundo b) e log n/3 = (k + 1). d.1) Se log n = (k+2), temos: d = (n( log n/3 + 3) - 3.2 log n /3 - (n. log n - 2 log n ))/n = (n(k+1+3) - 3.2 k+1 - (n(k+2+1) - 2 k+2 ))/n = (n.k + 4n -3.2 k+1 - n.k - 3n + 2 k+2 ))/n = (n -3.2 k+1 + 2.2 k+1 )/n = (3.2 k +p-2 k+1 )/(3.2 k +p) = (2 k +p)/(3.2 k + p) = ((2 k +p/3)+ 2p/3)/(3.(2 k + p/3)) d > 1/3, pois p 1. d.2) Se log n = (k+3), temos: d = (n( log n/3 + 3) - 3.2 log n /3 - (n. log n - 2 log n ))/n = (n(k+1+3) - 3.2 k+1 - (n(k+3+1) - 2 k+3 ))/n = (n.k + 4n -3.2 k+1 - n.k - 4n + 2 k+3 ))/n = (-3.2 k+1 + 4.2 k+1 )/n = 2 k+1 /(3.2 k +p) = (2.2 k )/(3.2 k + p) d > 1/3, pois p < 3.2 k. Então, a diferença mínima, para qualquer valor de n > 1, é 1/3. O Teorema 8 mostra que, no caso de frequências constantes, temos um resultado melhor do que a intuição sugere, pois a diferença no tamanho médio das codificações das duas árvores é limitada a 1/2, que se torna uma diferença desprezível para valores grandes de n. É, então, baixo o preço que se paga pelo acréscimo da funcionalidade de deteção de erros em número ímpar. Os resultados limites (1/3 e 1/2) podem ser explicados da seguinte forma, considerando ADI equilibradas: a) No caso de números de codificação da forma n = 2 k, a árvore de Huffman é uma árvore cheia, com todas as folhas tendo mesma profundidade log n. Já as ADIO, são constituídas por 2 k-1 subárvores equivalentes à ADIO para 2 codificações e, então, temos metade das folhas de codificação com a profundidade log n e metade com profundidade ( log n + 1), o que leva à diferença de 1/2. b) No caso de números de codificação da forma n = 3.2 k, a árvore de Huffman é uma árvore completa, com 2.2 k folhas com profundidade log n e 2 k com profundidade ( log n -1). Já as ADIO, são constituídas por 2 k subárvores equivalentes à ADIO para 3 codificações e, então, temos 2 k folhas de codificação com profundidade ( log n +1), 2 k com profundidade ( log n - 1), o que gera a diferença de 1/3. Para os demais valores de n, as árvores respectivas têm configurações intermediárias a essas configurações limite. 2471

ADIO para frequências quaisquer Embora não vá aquí ser discutido em detalhes o problema de determinar a ADIO para n codificações, frequências quaisquer, tal como foi feito para o caso de frequências constantes, vamos esboçar um limite superior para um algoritmo para esse problema. Esse limite pode ser obtido a partir de um lema, facilmente demonstrável: Lema 7: Dadas duas folhas de codificação de uma ADIO, c i e c j, com frequências de acesso respectivas f i e f j, e profundidades d i e d j, então se (f i f j ) (d i d j ). Esse princípio também é básico para as árvores de Huffman. Dele deriva um algoritmo de Programação Dinâmica, baseado em se procurar o melhor posicionamento da codificação de maior frequência, sabendo-se que, nesta configuração, a floresta induzida a partir do nível em que se encontra a referida chave, também é ótima, para as (n-1) codificações restantes. Muitos algoritmos desse tipo têm complexidade O(n 3 ), mas o desafio aquí é conseguir um algoritmo guloso. Bibliografia [1] R. Baeza e Y. Netto. Modern Information Retrieval. Addison Wesley, 1999. [2] M. J. Golin, C. Kenyon e N. E. Young. Huffman Coding with Unequal Letter Costs. Proceedings of the 34th Annual ACM Symposium of Theory of Computing, 2002 785-791. [3] R. W. Hamming. Coding and Information Theory. Prentice Hall, 1980. [4] D. A. Huffman. A Method for the Construction of Minimum Redundancy Codes. Proceedings of the IRE 40, (1951) 1098-1101. [5] D. E. Knuth. The Art of Computer Programming Vol I. Addison Wesley, 2nd edition, 1973. [6] J. L. Szwarcfiter e L. Markenzon. Estruturas de Dados e Seus Algoritmos. LTC Editora, 1994. 2472