Árvores de Pesquisa (Parte II)

Documentos relacionados
Árvores de Pesquisa (Parte II)

Árvores de Pesquisa (Parte II)

Aula T20 BCC202 Pesquisa (Parte 2) Árvores de Pesquisa. Túlio Toffolo

Aula 16: Pesquisa em Memória Primária - Árvores AVL. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Árvores Binárias e AVL Felipe Barros Pontes Gustavo Márcio de Morais Cunha Márcio de Medeiros Ribeiro

Árvores de Pesquisa (Parte I)

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Aula 16: Pesquisa em Memória Primária - Árvores de Busca. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Introdução a árvores AVL. Prof. Ernesto Lindstaedt

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

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

Árvores Binárias de Busca

Árvores Binárias de Busca

Árvores binárias de busca

Árvores binárias de busca

Estruturas de Dados. Aula 08. Árvores AVL II. Karina Mochetti

Aula T13 BCC202 Árvores. Túlio Toffolo

Introdução a AVL: teoria e prática. 22/11, 25/11 e 30/11

Árvores de Pesquisa (Parte I)

Árvores AVL e Árvores B. Jeane Melo

Árvore AVL A seguir estudaremos árvore AVL e árvore 234. Os slides que versão sobre as árvores retro aludidas foram baseados nos slides gerados pela

Árvores. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

DAINF - Departamento de Informática

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof Márcio Bueno. / Material da Prof a Ana Eliza

Árvores Binárias Balanceadas Estrutura de Dados I

Algoritmos e Estruturas de Dados II Árvores - AVL. Prof. César Melo DCC/ICE/UFAM

Árvores Binárias de Busca (ABB) 18/11

ALGORITMOS AVANÇADOS. UNIDADE V Estruturas de dados dos tipos Árvore Binária e Árvore AVL. Luiz Leão

Árvores Binárias de Busca (ABB) 18/11

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

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof a Karina Oliveira. Fonte: Prof a Ana Eliza

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

{ = == NULL) = == NULL)

ÁRVORES. Prof. Yan ndre Maldonado - 1. Prof. Yandre Maldonado e Gomes da Costa

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Universidade Federal de Mato Grosso Estrutura de Dados II

Uma árvore binária de busca não garante acesso em tempo logarítmico.

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Árvores. Prof. César Melo ICOMP/UFAM

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Árvores Binárias de Busca

AED2 - Aula 04 Vetores ordenados e árvores de busca

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 08: Árvores

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1

Árvore B. Uma Árvore B de ordem m éumaárvore,talque: Cada nó contém no máximo m

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Árvores AVL. Prof. Robinson Alves

Linguagem C: Árvores AVL

AED2 - Aulas 06 e 07 Árvores AVL e rubro-negras

Árvores AVL (Balanceadas) Profª.Drª. Roseli Ap. Francelin Romero Fonte: Profa. Patrícia Marchetti Revisão: Gedson Faria

Algoritmos e Estrutura de Dados. Aula 17 Estrutura de Dados: Árvores AVL Prof. Tiago A. E. Ferreira

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

Árvores AVL (Adelson-Velskii and Landis)

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Árvores AVL. O balanceamento da árvore pode ser realizado localmente se apenas uma porção da árvore for afetada por operações de inserção ou remoção.

Árvores AVL. Estrutura de Dados II Jairo Francisco de Souza

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Bit (Binary Digit) é a menor unidade de armazenamento de informação dentro do computador; Byte é a união de 8 bits capaz de representar 256

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

Dicionários. TAD Orientado a conteúdo

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

ÁRVORE AVL. Problema do balanceamento

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Árvore Binária de Busca. Prof. César Melo

Árvores AVL. Nesta aula será apresentado o ADT árvore AVL que são árvores binárias de altura equilibrada. Algoritmos e Estruturas de Dados I

BCC202 - Estrutura de Dados I

Árvores & Árvores Binárias

Mo#vação. Objec#vo. Estudar uma abordagem de desenvolvimento de so9ware orientada pelos objectos. Linguagens usadas: UML (Unified Modeling Language)

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I

Árvores Binárias de Busca

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

GGI026 - Árvore rubro-negra

Árvores Binárias de Busca

Árvores, Árvores Binárias e Árvores Binárias de Pesquisa. Rui Jorge Tramontin Jr.

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

Aula 08. Estruturas de dados Árvore e Grafo

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados. Árvores AVL: Partes I e II. Desempenho de ABBs (Revisão)

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Árvores binárias de busca

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação. Árvores Balanceadas

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

INE5408 Estruturas de Dados

INF1010 Lista de Exercícios 2

Árvores & Árvores Binárias

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

ÁRVORES. Árvores. Árvores. Prof. Yandre Maldonado e Gomes da Costa

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

INF 1010 Estruturas de Dados Avançadas. Árvores binárias

Teorema do Limite Central

Transcrição:

Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 22 Algoritmos e Estruturas de Dados I

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

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

Árvores Binárias Balanceadas 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 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 10.000 nós são necessárias, em média, 5.000 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.

ÁRVORE AVL PROGRAMAÇÃO DE TRIPULAÇÕES

Árvore AVL n Árvore binária de busca tal que, para qualquer nó interno v, a diferença das alturas dos filhos de v é no máximo 1. n Árvores AVL são balanceadas 2 4 44 17 78 1 2 32 50 1 1 48 62 3 88 1 Exemplo: números próximo dos nós são suas alturas.

AVL Algoritmo de balanceamento de árvores binárias. A origem da denominação AVL vem dos seus dois criadores: Adel son-vel skii e Landis. Ano de divulgação: 1962.

TAD-Árvore AVL n Estrutura de dados: typedef long TipoChave; typedef struct Registro { TipoChave Chave; /* outros componentes */ } Registro; typedef Struct No { Registro Reg; TNo *pesq, *pdir; } No; typedef TNo * TipoDicionario;

Árvores AVL 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 (FB) 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 de p) - altura(sub-árvore direita de p) Em uma árvore binária balanceada todos os FB de todos os nós estão no intervalo -1 FB 1

FB e Altura int FB (TNo* praiz) { } if (praiz == NULL) return 0; return Altura(pRaiz->pEsq) - Altura(pRaiz->pDir); int Altura(TNo* praiz) { int iesq,idir; } if (praiz == NULL) return 0; iesq = Altura(pRaiz->pEsq); idir = Altura(pRaiz->pDir); if ( iesq > idir ) return iesq + 1; else return idir + 1;

AVL 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 Primeiro caso: (rotação simples para a direita) 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. 1 2 3

AVL Primeiro caso: (rotação simples para a direita) 3 2 2 1 1 3

AVL Segundo caso: (rotação simples para a esquerda) 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. 1 2 3

AVL Segundo caso: (rotação simples para a esquerda) 1 2 2 1 3 3

AVL Terceiro caso: (rotação dupla para a direita) 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. 1 3 2

AVL Terceiro caso: (rotação dupla para a direita) 3 3 1 2 2 2 1 1 3

AVL Quarto caso: (rotação dupla para a esquerda) 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. 1 3 2

AVL Quarto caso: (rotação dupla para a esquerda) 1 2 3 1 2 3 2 1 3

Rotações Simples a = z T 0 T 1 b = y T 2 Rotação Simples a = z c = x T 3 b = y T 0 T 1 T 2 T 3 The imag e cann ot be displ ayed. Your com pute r may not c = x T 0 a = x The ima ge can not be dis play ed. You r co T 1 b = y T 2 c = z Rotação Simples T 3 T 0 a = x The ima ge can not be dis play ed. You r co T 1 b = y T 2 c = z T 3

Rotações Simples void RSE(TNo** ppraiz) { TNo *paux; } paux = (*ppraiz)->pdir; (*ppraiz)->pdir = paux->pesq; paux->pesq = (*ppraiz); (*ppraiz) = paux; void RSD(TNo** ppraiz) { TNo *paux; } paux = (*ppraiz)->pesq; (*ppraiz)->pesq = paux->pdir; paux->pdir = (*ppraiz); (*ppraiz) = paux;

Rotações Duplas T 0 a = z The imag e cann ot be displ ayed. Your com puter may not have enou gh T 1 b = x c = y Rotação Dupla a = z The imag e cann ot be displ ayed. Your com puter may not have enou gh b = x c = y T 2 T 2 T 3 T 0 T 1 T 3 a = y b = x The ima ge can not be dis play ed. You r co c = z Rotação Dupla b = x a = y T 0 T 2 3 T 2 T 3 T 1 T 0 T 1 T The ima ge can not be dis play ed. You r co c = z

Rotações Duplas int BalancaEsquerda(TNo** ppraiz) { int fbe = FB ( (*ppraiz)->pesq ); } if ( fbe > 0 ) { RSD(ppRaiz); return 1; } else if (fbe < 0 ) { /* Rotação Dupla Direita */ RSE( &((*ppraiz)->pesq) ); RSD( ppraiz ); /* &(*ppraiz) */ return 1; } return 0; int BalancaDireita(TNo** ppraiz) { int fbd = FB( (*ppraiz)->pdir); if ( fbd < 0 ) { RSE (ppraiz); return 1; } else if (fbd > 0 ) { /* Rotação Dupla Esquerda */ RSD( &((*ppraiz)->pdir) ); RSE( ppraiz ); /* &(*ppraiz) */ return 1; } return 0; }

Balanceamento int Balanceamento(TNo** ppraiz) { } int fb = FB(*ppRaiz); if ( fb > 1) return BalancaEsquerda(ppRaiz); else if (fb < -1 ) return BalancaDireita(ppRaiz); else return 0;

Inserção em uma Árvore AVL n n n Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo. Exemplo: 44 44 17 78 17 78 a=y c=z 32 50 88 32 50 88 48 62 48 62 b=x w 54 antes da inserção depois da inserção

Reestruturação Trinodo n n x, y, z (filho, pai e avô) renomeados como a,b,c (percurso interfixado) rotações levam b para o topo a=z b=y (outros dois casos são simétricos) a=z c=y caso 2: rotação dupla à esquerda (rotação simples à direita seguida de rotação simples à esquerda) T 0 c=x T 0 b=x T 1 b=y T 3 b=x T 2 T 3 a=z c=x T 1 T 2 a=z c=y caso 1: rotação simples à esquerda (em torno de a) T 0 T 1 T 2 T 3 T 0 T 1 T 2 T 3

Exemplo de inserção (cont.) 5 44 z 2 64 17 78 7 2 1 3 y 1 32 1 50 4 88 2 1 x 48 3 62 1 5 54 T 3 T T 0 2 4 T 1 44 desbalanceado balanceado 2 17 2 y 1 2 2 32 1 50 3 78 1 1 5 48 3 4 The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart 54 your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again. 62 x T 2 z 6 7 88 1 T 0 T 1 T 3

Inserção int Insere(TNo** ppraiz,registro* x) { if (*ppraiz == NULL) { } *ppraiz = (TNo*)malloc(sizeof(TNo)); (*ppraiz)->reg = *x; (*ppraiz)->pesq = NULL; (*ppraiz)->pdir = NULL; return 1; else if ( (*ppraiz)->reg.chave > x->chave ) { } if ( Insere(&(*ppRaiz)->pEsq,x) ) { } if (Balanceamento(ppRaiz)) return 0; else return 1; else if ( (*ppraiz)->reg.chave < x->chave ) { if ( Insere(&(*ppRaiz)->pDir,x) ) { if (Balanceamento(ppRaiz)) return 0; else return 1; } else return 0; } else return 0; /* valor jah presente */ }

Implementação de Inserção n Cálculo de fatores de balanceamento q Custo: O(log n)?? n Como melhorar? q Cada nó: q q Fator de balanceamento Profundidade x Altura q Problema: atualizar dados durante rotações

Remoção em uma árvore AVL n n Remoção começa como em uma árvore binária de busca è pode causar desbalanceamento Exemplo: 44 44 17 62 17 62 32 50 78 50 78 48 54 88 48 54 88 Antes da remoção de 32 Depois da remoção

Rebalanceamento após uma remoção n Seja z o primeiro nó desbalanceado encontrado acima de w. Seja y o filho de z com maior altura, e x o filho de y com maior altura. n Executar restructure(x) para rebalancear z. n Pode ocorrer desbalanceamento de outro nó acima è continuar verificação de balanceamento até à raiz. a=z 44 62 w 17 62 b=y 44 78 50 78 c=x 17 50 88 48 54 88 48 54

Remoção int Remove (TNo** ppraiz,registro* px) { if (*ppraiz == NULL) } return 0; else if ( (*ppraiz)->reg.chave == px->chave) { *px = (*ppraiz)->reg; Antecessor(ppRaiz,&((*ppRaiz)->pEsq)); Balanceamento(ppRaiz); return 1; } else if ( (*ppraiz)->reg.chave > px->chave ) { if (Remove((*ppRaiz)->pEsq,pX)) { Balanceamento(ppRaiz); return 1;} else return 0; } else /* código para sub-árvore direita */

ÁRVORE AVL PROGRAMAÇÃO ANÁLISE DE TRIPULAÇÕES

n Complexidade de Tempo para árvores AVL uma única reestruturação é O(1) q usando uma árvore binária implementada com estrutura ligada n pesquisa é O(log n) q altura de árvore é O(log n), não necesita reestruturação n inserir é O(log n) q busca inicial é O(log n) q reestruturação para manter balanceamento é O(log n) n remove é O(log n) q busca inicial é O(log n) q reestruturação para manter balanceamento é O(log n)

Verifica se uma árvore é AVL int EhArvoreArvl(TNo* praiz) { int fb; if (praiz == NULL) return 1; if (!EhArvoreArvl(pRaiz->pEsq)) return 0; if (!EhArvoreArvl(pRaiz->pDir)) return 0; } fb = FB (praiz); if ( ( fb > 1 ) ( fb < -1) ) return 0; else return 1;

ÁRVORE BINÁRIA DE PESQUISA PROGRAMAÇÃO APLICAÇÕES DE TRIPULAÇÕES

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

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

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

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

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

Problemas resolvidos? n Problema da ordenação q A ordenação dos pacotes pode ser feita trivialmente com apenas uma chamada ao método inorder() da árvore binária n Problema da redundância q 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

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

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

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

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

Compressão n 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 n Criação da tabela de caracteres e códigos binários n O que é armazenado? q Cadeia de bits gerada q Tabela de caracteres e códigos

Descompressão n Regeneração da árvore binária através da tabela de caracteres e códigos n 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

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

Perguntas?

Exercício n Mostre (desenhe) uma árvore AVL após a inserção dos seguintes elementos, em ordem: 10, 20, 5, 8, 12, 22, 23, 24, 11, 13, 18 n Mostre como ficará a árvore acima após a remoção dos seguintes elementos, na ordem abaixo: 22, 11, 5, 10