Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DO AMAZONAS FACULDADE DE TECNOLOGIA ENGENHARIA DA COMPUTAÇÃO ALGORITMO E ESTRUTURA DE DADOS II ÁRVORE AVL Manaus – AM 2014 1 AMANDA PÊGO DE PAULA - 21354614 JOELINE DUTRA DA SILVA - 21353194 REBECA NUNES RODRIGUES - 21350689 ÁRVORE AVL Manaus – AM 2014 Esse trabalho foi solicitado como forma de obtenção de nota parcial para a disciplina Algoritmo e Estrutura de Dados II, ministrado pelo Prof.º Edson Nascimento. 2 SUMÁRIO ÍNDICE DE ILUSTRAÇÕES ........................................................................................ 3 INTRODUÇÃO ............................................................................................................ 5 1. O QUE É UMA ÁRVORE AVL ................................................................................. 6 2. FATOR DE BALANCEAMENTO ............................................................................. 7 3. ESTRUTURA DE DADOS ....................................................................................... 9 4. ROTAÇÕES .......................................................................................................... 11 4.1. Rotação simples para a direita ........................................................................ 11 4.1.1. Como funciona .......................................................................................... 11 4.1.2. Passo a passo .......................................................................................... 12 4.2. Rotação simples para a esquerda ................................................................... 14 4.2.1. Como funciona .......................................................................................... 14 4.2.2. Passo a passo .......................................................................................... 15 4.3. Rotação dupla direita-esquerda ...................................................................... 17 4.3.1. Como funciona .......................................................................................... 17 4.3.2. Passo a passo .......................................................................................... 18 4.4. Rotação dupla esquerda-direita ...................................................................... 21 4.3.1. Como funciona .......................................................................................... 21 4.3.2. Passo a passo .......................................................................................... 22 5. BUSCA EM UMA ÁRVORE AVL ........................................................................... 26 6. INSERÇÃO EM UMA ÁRVORE AVL .................................................................... 27 7. REMOÇÃO EM UMA ÁRVORE AVL ..................................................................... 29 8. IMPRESSÃO EM UMA ÁRVORE AVL .................................................................. 30 8.1. Imprimir todas as chaves ................................................................................ 30 8.2. Imprimir em ordem crescente.......................................................................... 30 8.3. Imprimir em ordem decrescente ...................................................................... 31 CONCLUSÃO ............................................................................................................ 32 REFERÊNCIAS ......................................................................................................... 33 3 ÍNDICE DE ILUSTRAÇÕES Figura 1: Árvore AVL com lado esquerdo maior.......................................................... 7 Figura 2: Árvore AVL com lado direito maior. .............................................................. 7 Figura 3: Árvores AVL desbalanceadas. ..................................................................... 8 Figura 4: Inserção em AVL e FB após a inserção. .................................................... 11 Figura 5: Rotação simples para direita na AVL. ........................................................ 12 Figura 6: Passo 1 da rotação para direita. ................................................................ 12 Figura 7: Passo 2 da rotação para direita. ................................................................ 12 Figura 8: Passo 3 da rotação para direita. ................................................................ 13 Figura 9: Passo 4 da rotação para direita. ................................................................ 13 Figura 10: Antes e depois da rotação para direita. .................................................... 14 Figura 11: Inserção em AVL e FB. ............................................................................ 14 Figura 12: Rotação simples para esquerda na AVL. ................................................. 15 Figura 13: Passo 1 da rotação para esquerda. ......................................................... 15 Figura 14: Passo 2 da rotação para esquerda. ......................................................... 15 Figura 15: Passo 3 da rotação para esquerda. ......................................................... 16 Figura 16: Passo 4 da rotação para esquerda. ......................................................... 16 Figura 17: Antes e depois da rotação para esquerda. ............................................... 17 Figura 18: Inserção em AVL e FB. ............................................................................ 17 Figura 19: Primeira parte da rotação dupla Direita-Esquerda - Rotação à esquerda. .................................................................................................................................. 18 Figura 20: Segunda parte da rotação dupla Direita-Esquerda - Rotação à direita .... 18 Figura 21: Passo 1 da rotação Direita-Esquerda. ...................................................... 18 Figura 22: Passo 2 da rotação Direita-Esquerda. ...................................................... 19 Figura 23: Passo 3 da rotação Direita-Esquerda. ...................................................... 19 Figura 24: Passo 4 da rotação Direita-Esquerda. ...................................................... 19 Figura 25: Passo 5 da rotação Direita-Esquerda. ...................................................... 20 Figura 26: Passo 6 da rotação Direita-Esquerda. ...................................................... 20 Figura 27: Antes e depois da rotação dupla Direita-Esquerda. ................................. 21 Figura 28: Inserção em AVL e FB. ............................................................................ 21 Figura 29: Primeira parte da rotação dupla Esquerda-Direita - Rotação à direita. .... 22 4 Figura 30: Segunda parte da rotação dupla Esquerda-Direita - Rotação à esquerda. .................................................................................................................................. 22 Figura 31: Passo 1 da rotação Esquerda-Direita. ...................................................... 22 Figura 32: Passo 2 da rotação Esquerda-Direita. ...................................................... 23 Figura 33: Passo 3 da rotação Esquerda-Direita. ...................................................... 23 Figura 34: Passo 4 da rotação Esquerda-Direita. ...................................................... 23 Figura 35: Passo 5 da rotação Esquerda-Direita. ...................................................... 24 Figura 36: Passo 6 da rotação Esquerda-Direita....................................................... 24 Figura 37: Antes e depois da rotação dupla Esquerda-Direita. ................................. 25 5 INTRODUÇÃO Eficiência é algo que todos procuram em algoritmos, porém não é algo fácil de obter. Às vezes, um código eficiente para busca pode ter um tempo muito alto na hora de remover um item. A árvore binária de busca (ABB) é eficiente na busca, mas conforme dados vão sendo inseridos e/ou removidos, seu sistema de busca acaba não sendo tão eficiente quanto em uma árvore binária considerada equilibrada. Uma árvore equilibrada tem o tamanho do lado esquerdo e lado direito, a partir de sua raiz, muito parecidos. Para que a ABB fique equilibrada, é necessário um balanceamento estático: criar uma nova árvore e inserir os dados da árvore desequilibrada e então apaga-la. Todo esse processo custa muito tempo. A árvore de Adelson-Velsky e Landis (AVL) propõe uma mudança às árvores estáticas. Elas são árvores dinâmicas, ou seja, o seu balanceamento (a busca por seu equilibrio) é feito dentro da árvore após a inserção ou remoção de dados. 6 1. O QUE É UMA ÁRVORE AVL Os matemáticos soviéticos Georgy Adelson-Velsky e Evgenii Landis publicaram em “Algoritmos para organização de informação”, em 1962, a proposta de uma árvore que fosse balanceada dinamicamente. Essa árvore, conforme dados fossem inseridos e removidos, iria se balancear automaticamente. Com isso, a árvore sempre teria uma complexidade baixa. O fator principal da AVL é o balanceamento, que traz equilíbrio a árvore. Se ela está maior para um lado do que para o outro, dependendo de seu tipo, pode não estar em equilíbrio. O balanceamento é feito por rotações, que podem ser simples ou duplas, para a direita ou para a esquerda. A complexidade da árvore AVL, em notação O, é: Média Pior Caso Espaço n n Busca Log n Log n Inserção Log n Log n Remoção Log n Log n Tabela 1: Complexidade da AVL em notação O. 7 2. FATOR DE BALANCEAMENTO O fator de balanceamento é o que o computador utiliza para verificar o nível de equilíbrio da árvore AVL. Enquanto para nós é algo visual, a máquina apenas processa dados, logo o fator de balanceamento se torna necessário. Para ser considerada uma árvore AVL equilibrada, o fator de balanceamento tem que ser 1, 0 ou -1. Ao inserir um dado, ele se torna uma folha, cujo fator de balanceamento é sempre 0. Para calcular o fator de balanceamento, é necessário saber a altura da sub- árvore esquerda (sae) e da sub-árvore direita (sad). O fator pode ser calculado de duas maneiras: FB = h(sad)-h(sae) Figura 1: Árvore AVL com lado esquerdo maior. FB = h(sae)-h(sad) 0 -1 +1 0 Figura 2: Árvore AVL com lado direito maior. 8 Uma árvore AVL desequilibrada, ou desbalanceada, irá ter o fator de balanceamento menor que -1 ou maior que 1, como nos exemplos abaixo: 0 +2 +2 -1 0 -2 -4 -2 0 -1 0 Figura 3: Árvores AVL desbalanceadas. 9 3. ESTRUTURA DE DADOS A estrutura de uma arvore AVL é bem semelhante a estrutura de uma arvore binária de busca. As diferenças ficam por conta das informações que contribuirão para que a arvore passe por balenceamento. Assim, um nó de uma AVL pode ser: typedef struct no { int chave; int fb; struct no *Pai; //Opcional struct no *FilhoEsquerdo; struct no*FilhoDireito; } no; Onde fb representa a variável que armazena o valor do fator de balanceamento do nó. Outra forma de implementar esta estrutura é: typedef struct arvore{ int info; struct arvore *dir, *esq; int altura; //Altura máxima entre a altura das sub-árvores esquerda e direita }AVL; 10 A altura da maior das sub-árvores é declarada na estrutura, de forma que o fator de balanceamento é calculado a partir dessas informações e não precisa ser constantemente atualizado dentro da própria estrutura. 11 4. ROTAÇÕES Rotações são as operações que permitem o rebalanceamento das árvores AVL. As rotações alteram a posição dos nós envolvidos em seu processo. Existem quatro tipos de rotação: Rotação simples à direita Rotação simples à esquerda Rotação dupla à esquerda ou rotação direita-esquerda Rotação dupla à direita ou rotação esquerda-direita 4.1. Rotação simples para a direita 4.1.1. Como funciona Abaixo se percebe uma situação em que uma árvore balanceada recebe um novo nó. Ocorre desbalanceamento para o nó C cujo fator de balanceamento passa de -1 para -2, sendo necessário uma rotação. Sabe-se que a rotação deve ser para a direita, pois o ramo mais pesado da árvore é o esquerdo como indica o sinal negativo do FB de C. Figura 4: Inserção em AVL e FB após a inserção. Insere a a c b FB(a)=0 FB(b)=-1 FB(c)=-2 c b 12 Balanceando: Figura 5: Rotação simples para direita na AVL. A rotação torna B o pai de A e C e balanceia a árvore. 4.1.2. Passo a passo Endereços de B e C são guardados em variáveis auxiliares. Note que os filhos esquerdos de B e C apontam para NULO. O filho esquerdo de C passa a receber o filho direito de B. c a b a c b Rotaciona FB(a)=0 FB(c)=0 FB(b)=0 a c b AuxC AuxB a c b AuxC AuxB Figura 6: Passo 1 da rotação para direita. Figura 7: Passo 2 da rotação para direita. 13 O filho direito de B passa a ser C. O AuxC que indica início da árvore aponta para B. B agora é raiz. Em linhas gerais, a partir do exemplo tem-se o pseudocódigo: Ap = P; //Pai é guardado em variável que indica raiz da árvore Af = Ap->FilhoEsquerdo; //(F) Filho Esquerdo é guardado em variável auxiliar Ap->FilhoEsquerdo = Af->FilhoDireito; Af->FilhoDireito = Ap; //Pai torna-se filho Ap = Af; //Filho torna-se raiz da árvore a c b AuxC AuxB a c b AuxC AuxB Figura 8: Passo 3 da rotação para direita. Figura 9: Passo 4 da rotação para direita. 14 Figura 10: Antes e depois da rotação para direita. 4.2. Rotação simples para a esquerda 4.2.1. Como funciona Assim como no exemplo para Rotação simples, na imagem abaixo ocorre o desbalanceamento da árvore após a inserção de um elemento. Neste caso a rotação deve ser para a esquerda, pois o ramo mais pesado da árvore é o direito como indica o sinal positivo do FB de A. Figura 11: Inserção em AVL e FB. Balanceando: P F P F a b Insere c c a b FB(c)=0 FB(b)=+1 FB(a)=+2 15 Figura 12: Rotação simples para esquerda na AVL. A árvore fica balanceada com a rotação. 4.2.2. Passo a passo O primeiro passo é o mesmo do da rotação para a direita: endereços de B e C são guardados em variáveis auxiliares. O filho direito de A passa a receber o filho esquerdo de B.c a b c a b Rotaciona FB(a)=0 FB(c)=0 FB(b)=0 c a b AuxB AuxA c a b AuxB AuxA Figura 13: Passo 1 da rotação para esquerda. Figura 14: Passo 2 da rotação para esquerda. 16 O filho esquerdo de B passa a ser A. O AuxA que indica início da árvore aponta para B. B agora é raiz. O pseudocódigo para rotação à esquerda é então: Ap = P; Af = Ap->FilhoDireito; //(F) Ap->FilhoDireito= Af->FilhoEsquerdo; Af->FilhoEsquerdo = Ap; Ap = Af; c a b AuxB AuxA c a b AuxB AuxA Figura 15: Passo 3 da rotação para esquerda. Figura 16: Passo 4 da rotação para esquerda. 17 Figura 17: Antes e depois da rotação para esquerda. 4.3. Rotação dupla direita-esquerda 4.3.1. Como funciona A inserção de B desbalanceia a árvore tornando o ramo esquerdo mais pesado. Desta vez, a rotação da sub-árvore(filho) deve ser à esquerda. Abaixo, pode- se ver que em relação a A, o ramo direito pesa mais. A rotação seguinte, aplicada à árvore (pai), deve ser à direita. Figura 18: Inserção em AVL e FB. O primeiro passo do balanceamento é a rotação à esquerda da sub-árvore: P F P F Insere b FB(b)=0 FB(a)=+1 FB(c)=-2 c a b c a 18 Figura 19: Primeira parte da rotação dupla Direita-Esquerda - Rotação à esquerda. Tem-se então uma árvore como a vista em rotação para a direita: Figura 20: Segunda parte da rotação dupla Direita-Esquerda - Rotação à direita A árvore está então balanceada com B por raiz. 4.3.2. Passo a passo Variáveis guardam os endereços de C (pai), A (filho) e B (neto). FB(c)=0 FB(b)=-1 FB(a)=-2 b a a b Resultando Rotação para a esquerda a c b c a b Rotação para a direita FB(a)=0 FB(c)=0 FB(b)=0 a c b b c a AuxC AuxA AuxB Figura 21: Passo 1 da rotação Direita- Esquerda. 19 Filho direito de A aponta para filho esquerdo de B. Filho direito de B aponta para A. Filho direito de C aponta para filho esquerdo de B. b c a AuxC AuxA AuxB b c a AuxC AuxA AuxB b c a AuxC AuxA AuxB Figura 22: Passo 2 da rotação Direita- Esquerda. Figura 23: Passo 3 da rotação Direita- Esquerda. Figura 24: Passo 4 da rotação Direita-Esquerda. 20 Filho esquerdo de B passa a ser C. O AuxA que indica início da árvore aponta para B. B agora é raiz. Pseudocódigo: Ap = P; Af = Ap->FilhoEsquerdo; //(F) An = Af->FilhoDireito; //(N) Af->FilhoDireito = An->FilhoEsquerdo; An->FilhoEsquerdo = Af; Ap->FilhoEsquerdo = An->FilhoDireito; An->FilhoDireito = Ap; Ap = An; b c a AuxC AuxA AuxB b c a AuxC AuxA AuxB Figura 25: Passo 5 da rotação Direita-Esquerda. Figura 26: Passo 6 da rotação Direita- Esquerda. 21 Figura 27: Antes e depois da rotação dupla Direita-Esquerda. 4.4. Rotação dupla esquerda-direita 4.3.1. Como funciona A inserção de B desbalanceia a árvore tornando o ramo direito mais pesado. Repare que o fator de balanceamento da árvore tem sinal oposto ao da sub- árvore (filho), isto indica rotação dupla. A rotação dupla trata-se de duas rotações seguidas de sentido oposto. A primeira rotação aplicada à sub-árvore e a segunda à árvore. A rotação da sub-árvore(filho) deve ser à direita. No exemplo a seguir, pode- se ver que em relação a C, o ramo esquerdo pesa mais. A rotação seguinte, aplicada à árvore, deve ser à esquerda. Figura 28: Inserção em AVL e FB. O primeiro passo do balanceamento é a rotação à direita da sub-árvore: N P F N P F a c Insere b b a c FB(b)=0 FB(c)=-1 FB(a)=+2 22 Figura 29: Primeira parte da rotação dupla Esquerda-Direita - Rotação à direita. Tem-se então uma árvore como a vista em rotação para à esquerda: Figura 30: Segunda parte da rotação dupla Esquerda-Direita - Rotação à esquerda. A árvore está então balanceada com B por raiz. 4.3.2. Passo a passo Variáveis guardam os endereços de A (pai), C (filho) e B (neto). FB(c)=0 FB(b)=+1 FB(a)=+2 c b b c Resultando c a b Rotação para a direita c a b c a b Rotação para esquerda FB(a)=0 FB(c)=0 FB(b)=0 b a c AuxC AuxA AuxB Figura 31: Passo 1 da rotação Esquerda- Direita. 23 Filho esquerdo de C aponta para filho direito de B. Filho direito de B aponta para C. Filho direito de A aponta para filho esquerdo de B. b a c AuxC AuxA AuxB b a c AuxC AuxA AuxB b a c AuxC AuxA AuxB Figura 32: Passo 2 da rotação Esquerda-Direita. Figura 33: Passo 3 da rotação Esquerda- Direita. Figura 34: Passo 4 da rotação Esquerda- Direita. 24 Filho esquerdo de B passa a ser A. O AuxA que indica início da árvore aponta para B. B agora é raiz. Pseudocódigo: Ap = P; Af = Ap->FilhoDireito; (F) An = Af->FilhoEsquerdo; (N) Af->FilhoEsquerdo = An->FilhoDireito; An->FilhoDireito = Af; Ap->FilhoDireito = An->FilhoEsquerdo; b a c AuxC AuxA AuxB b a c AuxC AuxA AuxB Figura 35: Passo 5 da rotação Esquerda- Direita. Figura 36: Passo 6 da rotação Esquerda- Direita. 25 An->FilhoEsquerdo = Ap; Ap = An; Figura 37: Antes e depois da rotação dupla Esquerda-Direita. N P F N P F 26 5. BUSCA EM UMA ÁRVORE AVL A Busca em uma AVL ocorre tal qual em uma Árvore Binária de Busca. A razão disto é que a busca não dependerá da Altura da árvore. Uma árvore binária de busca T é uma árvore de decisão, onde a pergunta feita ao nó v é se a chave k é menor, igual ou maior que a chave armazenada v. O pseudocódigo ficaria como: Algoritmo BuscaArvore (k,v): Entrada: Uma chave de busca k e um nó v de uma arvore binária de busca T. Saída: Um nó w da subarvore T(v) da raiz T em v, tal que w é um nó interno que armazena k ou w é um nó externo encontrado na travessia InOrder de T(v) depois de todos os nós internos com chaves menores que k e antes de todos os nós internos com chaves maiores que k. IF v é um nó externo então Retorne v IF k = chave (v) então Retorne v Senão, se k<chave(v) então Retorne BuscaArvore (k,T.FilhoEsquerdo (v)) Senão // ocorre {k > chave (v)} Retorne BuscaArvore (k, T.FilhoDireito (v)) 27 6. INSERÇÃO EM UMA ÁRVORE AVL Inserção em uma árvore AVL deve ser dada pela inserção do nodo seguida de uma verificação na propriedade do fator de balanceamento. Caso não obedeça a essa propriedade, deve-se fazer uma rotação conveniente. Suponha que uma árvore T é AVL e que um novo nó X seja inserido em T causando um desbalanceamentona árvore. A fim de mantermos a árvore T como AVL, precisamos de um rebalanceamento dos nós. Este rebalanceamento é realizado através de rotações no primeiro ancestral de X cujo fator de balanceamento torna-se ±2. Seja A o primeiro ancestral de X cujo fator de balanceamento torna-se ±2 após a inclusão de um novo elemento. Rotação (LL): O novo nó X é inserido na sub-árvore da esquerda do filho esquerdo de A; Rotação (LR): X é inserido na sub-árvore da direita do filho esquerdo de A; Rotação (RR): X é inserido na sub-árvore da direita do filho direito de A; Rotação (RL): X é inserido na sub-árvore da esquerda do filho direito de A. Para inserir um nó X em uma árvore AVL, basta os seguintes passos: 1. Inserir X na árvore AVL usando o mesmo algoritmo de inserção de um nó em uma árvore de busca binária. Recursivamente, empilhar cada nó que é visitado a partir do nó raiz até X, exceto o próprio X; 2. Verificar se a pilha está vazia: Se sim, o algoritmo termina. Senão, seguir para o passo (3). 3. Desempilhar um nó e verificar se a diferença de altura entre a sub-árvore da esquerda e da direita desse nó é maior que 1. Se sim, voltar para o passo (2). 28 Senão, será necessário rotacionar os nós. Depois de realizada a rotação, o algoritmo termina. Nota-se que a operação de inclusão pode ser realizada em tempo O(lg(n)). Após as rotações, a árvore possui a mesma altura que antes da inclusão do novo elemento, logo os fatores de balanceamento dos elementos que não estão envolvidos nas rotações não mudam. 29 7. REMOÇÃO EM UMA ÁRVORE AVL A remoção deve ser dada por uma rotação em torno do nó a ser removido, a fim de torná-lo folha para que então possa ser removido. Em alguns casos, após a remoção são necessárias rotações para ajustar o fator de balanceamento. Para remover um nó s de uma árvore AVL, basta seguir os seguintes passos: 1. Remover X da árvore AVL usando o mesmo algoritmo de remoção de um nó em uma árvore de busca binária. Recursivamente, empilhar cada nó que é visitado a partir do nó raiz até o nó X, incluindo-o; 2. Verificar se a pilha está vazia Se sim, o algoritmo termina. Senão, seguir para o passo (3). 3. Desempilhar um nó e verificar se a diferença de altura entre a sub-árvore da esquerda e da direita desse nó é maior que 1. Se sim, será necessário rotacionar os nós. Dependendo do tipo de rotação realizada, o algoritmo pode não terminar aqui. Se ele não terminar, voltar para o passo (2). Senão, vá para o passo (2). Nota-se que a operação de remoção pode ser realizada em tempo O(lg(n)). Na remoção de um elemento em uma árvore AVL, pode haver a necessidade de realizar mais de duas rotações (o que não acontece na inserção), podendo se estender para uma rotação em cada nível (O(log(n))) no pior caso. 30 8. IMPRESSÃO EM UMA ÁRVORE AVL Tal qual a busca, na árvore AVL o método para impressão dos dados é o mesmo de uma Árvore Binária de Busca. 8.1. Imprimir todas as chaves Algoritmo Imprime(*R): Entrada: referência de uma árvore AVL R. Saída: Trata-se um procedimento. Serão impressos todos os nós em Pré- Ordem, ou seja, primeiro a raiz e depois as subárvores. Outra forma de expressar a ordem de processamento dos nós pode ser: r-e-d (raiz, subárvore esquerda, subárvores direita). IF R é diferente de NULL então Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo Imprime (R.FilhoEsquerdo) //imprime chaves da subárvore esquerda Imprime (R.FilhoDireito) // imprime chaves da subárvore direita 8.2. Imprimir em ordem crescente Algoritmo Imprime(*R): Entrada: referência de uma árvore AVL R. Saída: Trata-se um procedimento. Serão impressas primeiramente todas as chaves da subárvore esquerda, depois a chave da raiz, e por fim as chaves da subárvore direita. Este tipo de percurso dos nós de uma árvore se chama In-Ordem, ou seja, raiz no meio (in) das subárvores. 31 IF R é diferente de NULL então Imprime (R.FilhoEsquerdo) //imprime chaves da subárvore esquerda Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo Imprime (R.FilhoDireito) // imprime chaves da subárvore direita 8.3. Imprimir em ordem decrescente Algoritmo Imprime(*R): Entrada: referência de uma árvore AVL R. Saída: Trata-se de um procedimento. Serão impressas primeiramente todas as chaves da subárvore direita, depois a chave da raiz e depois as chaves da subárvore esquerda. IF R é diferente de NULL então Imprime (R.FilhoDireito) // imprime chaves da subárvore direita Escreve (R.chave) //imprime a chave da raiz com printf, por exemplo Imprime (R.FilhoEsquerdo) //imprime chaves da subárvore esquerda 32 CONCLUSÃO A árvore AVL é considerada uma das mais eficientes, em questão da complexidade, quando comparada a outros tipos de árvores. São utilizadas em redes de comunicação e na codificação para compactação de arquivos. Nas redes de comunicação, os dados são fragmentados e enviados várias vezes. Pode ocorrer do pacote de dados não chegar inteiro ao destino ou de ter dados que já foram recebidos. Por utilizar uma árvore binária, é fácil pesquisar e ter acesso aos dados recebidos e inseri-los a lista. Ao utilizar uma AVL, fica garantida uma maior rapidez ao acesso de dados. A principal codificação que utiliza conceitos de árvores binárias é conhecida como Algoritmo de Huffman, que armazena letras e a quantidade delas. Com a árvore binária fica fácil diminuir a quantidade antes necessária do arquivo. Mas ainda assim, a árvore AVL pode acabar sendo custosa devido à necessidade de rotações para o balanceamento da árvore. Quando maior for a árvore, mais rotações serão necessárias para poder chegar ao ponto de remover um dado, e ainda mais rotações para equilibrá-la novamente. 33 REFERÊNCIAS ANDRADE, Lívia. Árvores AVL. Disponível em: http://www.passeidireto.com/arquivo/1012626/aula-5_arvore-avl. Acesso em 14 de Junho de 2014. BORGES, Henrique. Algoritmo de Huffman. Disponível em: http://www.youtube.com/watch?v=2yWfo50jZiw. Acesso em 14 de Junho de 2014. BUENO, Letícia. Árvores AVL. Disponível em: http://professor.ufabc.edu.br/~leticia.bueno/classes/aed2/materiais/avl.pdf. Acesso em 14 de Junho de 2014. COSTA, Jean. Algoritmo de Huffman. Disponível em: http://www.youtube.com/watch?v=MXI4LWgDucA. Acesso em 14 de Junho de 2014. DUTRA, Caio. Árvore Binária AVL. Disponível em: http://www.vivaolinux.com.br/script/Arvore-binaria-AVL. Acesso em 14 de Junho de 2014. FERRARI, Roberto. Estruturas de dados – Unidade 16: Árvores Binárias de Busca – Parte 1. Disponível em: http://www2.dc.ufscar.br/~bsi/materiais/ed/u16.html. Acesso em: 24 de Junho de 2014. HARGROVE, John. The AVL Tree Rotations Tutorial. Disponível em: http://pages.cs.wisc.edu/~paton/readings/liblitVersion/AVL-Tree-Rotations.pdf. Acesso em 14 de Junho de 2014. KRUSE, Robert; RYBA, Alex. Data Structures and Program Design in C++. Section 10.4, Height Balance: AVL tree. Disponível em: http://cs.gmu.edu/~setia/cs310/slides/avl.pdf. Acesso em 18 de Junho de 2014. MORRIS, John. AVL trees. Disponível em: https://www.cs.auckland.ac.nz/software/AlgAnim/AVL.html. Acesso em 14 de Junho de 2014. 34 NASCIMENTO, Edson. Árvore AVL. Disponível em: http://colabweb.ufam.edu.br/pluginfile.php/14107/mod_resource/content/3/aed2_10_ Arvore%20AVL.pdf.Acesso em 14 de Junho de 2014. NONATO, Luiz. Algoritmo de Inserção. Disponível em: http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html. Acesso em: 24 de Junho de 2014. NONATO, Luiz. Implementação da Remoção. Disponível em: http://www.lcad.icmc.usp.br/~nonato/ED/AVL/algo-remocao.html. Acesso em: 24 de Junho de 2014. NONATO, Luiz. Inserção em uma Árvore AVL. Disponível em: http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html. Acesso em: 24 de Junho de 2014. PARLANI, Nick. BInary Trees. Disponível em: http://cslibrary.stanford.edu/110/BinaryTrees.html. Acesso em: 24 de Julho de 2014. PROSSER, Patrick. AVL Trees. Disponível em: http://www.dcs.gla.ac.uk/~pat/52233/slides/AVLTrees1x1.pdf. Acesso em: 24 de Junho de 2014. SOUZA, Jairo. Árvore AVL. Disponível em: http://www.ufjf.br/jairo_souza/files/2009/12/5-Indexa%C3%A7%C3%A3o-Arvore- AVL.pdf. Acesso em 18 de Junho de 2014. TOFFOLO, Túlio. Árvores AVL. Disponível em: http://www.decom.ufop.br/toffolo/site_media/uploads/2011-1/bcc202/slides/25._ arvores_%28parte_2%29.pdf. Acesso em 14 de Junho de 2014. WALKER, Julienne. AVL trees. Disponível em: http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx. Acesso em 14 de Junho de 2014. WIKIPÉDIA. Árvore AVL – Inserção. Disponível em: http://pt.wikipedia.org/wiki/%C3%81rvore_AVL#Inser.C3.A7.C3.A3o. Acesso em: 24 de Junho de 2014. 35 WIKIPÉDIA. Codificação de Huffman. Disponível em: http://pt.wikipedia.org/wiki/Codifica%C3%A7%C3%A3o_de_Huffman. Acesso em 14 de Junho de 2014. WIKIPEDIA. Evgenii Landis. Disponível em: http://en.wikipedia.org/wiki/Evgenii_Landis. Acesso em 14 de Junho de 2014. WIKIPEDIA. Georgy Adelson-Velsky. Disponível em: http://en.wikipedia.org/wiki/Georgy_Adelson-Velsky. Acesso em 14 de Junho de 2014. Árvore AVL. Disponível em: http://www.passeidireto.com/arquivo/2536633/arvore- avl. Acesso em 14 de Junho de 2014.
Compartilhar