A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

Apresentações semelhantes


Apresentação em tema: "Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros."— Transcrição da apresentação:

1 Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros

2 Sumário Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicações Árvore Binária & AVL

3 Introdução Inserir em Array Ordenado: Achar o Local da inserção: O(log N); Inserir: Mover os elementos para frente (N/2 movimentos); Procurar em Lista Encadeada: Comparar cada elemento da lista: N/2 comparações; Tempo necessário: O(N); Solução para os problemas? Solução para os problemas? SIM!! SIM!! ÁRVORE BINÁRIA

4 Sumário Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicações Árvore Binária & AVL

5 Raiz; Caminho; Nó; Folha; Pai e Filho; Sub-árvore; Níveis; Árvores Binárias. Conceitos Básicos

6 Sumário Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicativos e Aplicações Árvore Binária & AVL

7 Algoritmos Função Insere ( Elemento, Árvore ) Árvore começar se EvaziaArv ( Árvore ) devolver CriarArv (Árvore, NULL, NULL ) senão começar se ( Elemento < No ( Árvore )) devolver CriarArv ( No ( Árvore ), Insere ( Elemento, fe ( Árvore )), fd ( Árvore)) senão devolver CriarArv ( No ( Árvore ), fe ( Árvore ), Insere ( Elemento, fd ( Árvore )) acabar Inserção

8 Algoritmos Deleção Função eliminar (Elemento, Árvore) Árvore; começar se EvaziaArv ( Árvore ) eliminar = NULL senão começar se No ( Árvore )=x começar se EvaziaArv (fd(a)) eliminar=fe(a) senão se EvaziaArv (fe(a)) eliminar=fd(a) senão eliminar = CriarArv (min(fd(a)),fe(a),eliminar(min(fd(a))),fd(a)) acabar senão começar Se x < No(Árvore) eliminar = CriarArv (no(a),eliminar(x,fe(a),fd(a)); senão elimina = CriarArv (no(a),fe(a),eliminar(x,fd(a)); acabar devolver Árvore acabar

9 Algoritmos Busca O algoritmo de busca é idêntico ao algoritmo de inserção, com pequenas modificações: Função Busca (Elemento, Árvore) Árvore começa enquanto (Nó(Árvore) != Elemento) se (Nó (Árvore) = NULL) devolva NULL se (Elemento < Nó (Árvore)) Busca (Elemento, fe(Árvore)) senão começa se (Elemento > Nó(Árvore)) Busca (Elemento, fd(Árvore)) Senão começa se (Elemento = Nó(Árvore)) devolve Nó(Árvore) acaba acaba_enquanto acaba

10 O percurso InOrder fará com que todos os nós sejam visitados na ordem ascendente, baseada em seus valores chaves Algoritmo Simplificado 1. Chama a si mesmo para percorrer a subárvore esquerda do nó; 2. Visita o nó; 3. Chama a si mesmo para percorrer a subárvore a direita do nó. Algoritmos Percurso - InOrder

11 O percurso PreOrder fará com que todos os nós sejam visitados de modo a gerar uma expressão algebrica prefixa. Algoritmo Simplificado 1. Visita o nó; 2. Chama a si mesmo para percorrer a subárvore esquerda do nó; 3. Chama a si mesmo para percorrer a subárvore a direita do nó. Algoritmos Percurso - PreOrder

12 O percurso PostOrder fará com que todos os nós sejam visitados de modo a gerar uma expressão algebrica posfixa. Algoritmo Simplificado 1. Chama a si mesmo para percorrer a subárvore esquerda do nó; 2. Chama a si mesmo para percorrer a subárvore a direita do nó. 3. Visita o nó; Algoritmos Percurso - PostOrder

13 A * (B + C) A B C * + Infixa: A*(B+C) Posfixa: ABC+* Prefixa: *A+BC

14 Sumário Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicativos e Aplicações Árvore Binária & AVL

15 Inserindo os nós 30, 20, 40, 10, 25, 35 e 50 nesta ordem, teremos: Árvores Binárias Balanceadas e AVL

16 Inserindo os nós 10, 20, 30, 40 e 50 nesta ordem, teremos: Árvores Binárias Balanceadas e AVL

17 Existem ordens de inserção de nós que conservam o balanceamento de uma árvore binária. Na prática é impossível prever essa ordem ou até alterá-la. Algoritmos para balanceamentos. Árvores Binárias Balanceadas

18 A vantagem de uma árvore balanceada com relação a uma degenerada está em sua eficiência. Por exemplo: numa árvore binária degenerada de nós são necessárias, em média, comparações (semelhança com arrays ordenados e listas encadeadas). Numa árvore balanceada com o mesmo número de nós essa média reduz-se a 14 comparações. Árvores Binárias Balanceadas

19 Uma árvore binária balanceada é aquela na qual, para cada nó, as alturas de suas sub-árvores esquerda e direita diferem de, no máximo, 1. Fator de balanceamento de um nó é a diferença entre a altura da sub-árvore esquerda em relação à sub-árvore direita. FB(p) = altura(sub-árvore esquerda p) - altura(sub- árvore direita p) Em uma árvore binária balanceada todos os Fatores de Balanceamento de todos os nós estão no intervalo -1 <= FB <= 1 Árvores Binárias Balanceadas

20 Algoritmo de balanceamento de árvores binárias. A origem da denominação AVL vem dos seus criadores: Adelson-Velskii e Landis. Ano de divulgação: AVL

21 Inicialmente inserimos um novo nó na árvore normalmente. A inserção deste pode degenerar a árvore. A restauração do balanceamento é feita através de rotações na árvore no nó pivô. Nó pivô é aquele que após a inserção possui Fator de Balanceamento fora do intervalo. AVL

22 Primeiro caso: FB > 1 (subárvore esquerda maior que subárvore direita) E a subárvore esquerda desta subárvore esquerda é maior que a subárvore direita dela Então realizar uma rotação simples para a direita. AVL 3 2 1

23 Primeiro caso:

24 Segundo caso: FB < -1 (subárvore esquerda menor que subárvore direita) E a subárvore direita desta subárvore direita é maior que a subárvore esquerda dela Então realizar uma rotação simples para a esquerda. AVL 1 2 3

25 Segundo caso: AVL

26 Terceiro caso: FB > 1 (subárvore esquerda maior que subárvore direita) E a subárvore esquerda desta subárvore esquerda é menor ou igual que a subárvore direita dela Então realizar uma rotação dupla para a direita. AVL 1 3 2

27 Terceiro caso: AVL

28 Quarto caso: FB < -1 (subárvore esquerda menor que subárvore direita) E a subárvore direita desta subárvore direita é menor que a subárvore esquerda dela Então realizar uma rotação dupla para a esquerda. AVL 1 3 2

29 Quarto caso: AVL

30 Sumário Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicações Árvore Binária & AVL

31 Aplicações Para que servem as Árvores Binárias? Exemplos de aplicações: Redes de Comunicação de Dados Envio de pacotes ordenados e/ou redundantes Codificação de Huffman Compressão e Descompressão de arquivos

32 1) Redes de Comunicação A maioria dos protocolos de comunicação fragmenta as mensagens em pacotes que são numerados e enviados através da rede Não há garantia da chegada em ordem dos pacotes Perdas de pacotes geram novos envios e estes podem causar duplicatas dos mesmos

33 Reconstrução da Mensagem Como reconstruir a mensagem corretamente? Descartar os pacotes repetidos Ordenar os pacotes Como implementar tal algoritmo? Utilizando Árvores Binárias

34 Exemplo: R R R R R A B P3 P1 P2 P3 P1 P2P3 P1 Ordem de Chegada: P3P1P2 Confirmação de envio: P1 e P3. P1 Ok P2 ? P3 Ok Reenvio de P2. P2 Problemas: ordens e redundância dos pacotes

35 Algoritmo O primeiro pacote é colocado na raiz da árvore. Cada pacote sucessivo é comparado com o da raiz Se for igual, descarta-se a réplica. Se for menor ou maior, percorre-se os lados esquerdo ou direito da árvore Sub-árvore vazia implica inserção do novo pacote Sub-árvore não vazia implica comparação dos pacotes com a mesma

36 Problemas resolvidos? Problema da ordenação A ordenação dos pacotes pode ser feita trivialmente com apenas uma chamada ao método inOrder() da árvore binária Problema da redundância Solucionado com o algoritmo de inserção na árvore, visto que o pacote, antes de ser inserido, é comparado com os demais que já se encontram na árvore binária

37 2) Codificação de Huffman Algoritmo utilizado para comprimir arquivos Todo o algoritmo é baseado na criação de uma Árvore Binária Programas como Winzip e WinRAR utilizam este algoritmo Criado por David Huffman em 1952

38 Códigos e Caracteres Caracteres são letras, números e símbolos Códigos são seqüências de bits que podem representar de maneira ÚNICA um caracter b bits para representar c caracteres: Exemplos: c = 2 b ASCII (7 bits)Extended ASCII (8 bits) 2 = 128 caracteres 7 2 = 256 caracteres 8

39 Como comprimir arquivos? No código ASCII, todos os caracteres têm um número fixo de bits Números variáveis de bits implica menor capacidade de armazenamento Associações com bits variáveis podem comprimir consideravelmente o arquivo Como comprimir arquivos desta maneira? Utilizando a Codificação de Huffman!

40 Exemplo: Freqüências: A = 10; B = 8; C = 6; D = 5; E = 2 Construção da Árvore Binária Comparação do número de bits Tamanho Fixo (8 bits) Total = 248 bits Tamanho Variável Total = 69 bits AAAAAAAAAABBBBBBBBCCCCCCDDDDDEE Considere o arquivo com o seguinte texto:

41 Compressão Depois da geração da árvore, o arquivo é percorrido novamente e cada caracter do arquivo é substituído pelo código binário contido na árvore, gerando uma cadeia de bits Criação da tabela de caracteres e códigos binários O que é armazenado? Cadeia de bits gerada Tabela de caracteres e códigos

42 Descompressão Regeneração da árvore binária através da tabela de caracteres e códigos A cadeia de bits é percorrida e, à medida que uma sub-cadeia é encontrada na tabela de caracteres e códigos, a mesma é substituída pelo caracter correspondente

43 Conclusões As árvores binárias são uma das estruturas de dados mais importantes devido a grande aplicabilidade das mesmas. A maioria dos algoritmos das árvores binárias são de simples entendimento, facilitando sobremaneira o desenvolvimento de sistemas.

44 tml Material disponível em Bibliografia

45 Dúvidas


Carregar ppt "Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros."

Apresentações semelhantes


Anúncios Google