André Lopes Pereira Luiz Carlos Barboza Júnior

Slides:



Advertisements
Apresentações semelhantes
Estruturas de Dados Arvores
Advertisements

Pesquisas de Dados (Parte 2)
Árvores Equilibradas Sumário Splay B-tree Vermelho-Preto AA e BB
Estrutura de Dados e Algoritmos e Programação e Computadores II
Organização e Recuperação da Informação
Algoritmos BUSCA E INSERÇÃO
Algoritmos e Estrutura de Dados I
MC 202 – Estruturas de dados
Árvore Binária - altura máxima A: Inserção de 1, 2, 3, 4, 5, 6 e 7 Pior caso: O(n)

Pesquisa em Memória Primária
Pesquisa em Memória Primária – Árvores AVL
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária
SEMINÁRIO DE ALGORITMOS
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Árvores AVL.
Estrutura de Dados (Mapas)
Árvores Balanceadas (AVL)
Árvores Binárias de Pesquisa (ABP)
Listas com Ponteiros Listas encadeadas Listas circulares.
CAP-223 Árvore através de uma Árvore Binária A BCDE FGHIJK A BC D E FGHIJK.
Indexação de Arquivos Página de rosto.
Prof. Ernesto Lindstaedt
Árvore Binária de Busca
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso B: Remover o elemento que está no meio da lista, sendo que a lista possui vários.
LISTAS DUPLAMENTE ENCADEADAS
Alberto Rodrigues Costa Junior - (arcj)
Heaps de Fibonacci Lino Alves.
Pesquisa em Memória Primária
INF 1010 Estruturas de Dados Avançadas
Árvores Binárias de Pesquisa
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algoritmos e Estrutura de Dados III
1. Se este nó é raiz de uma árvore QuasiEquilibrada de ordem k, e
Árvores Balanceadas Liliane Rose Benning Salgado.
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Rotação Simples e Dupla Katia Guimarães
Estruturas de Dados e Ordenação
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto.
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso A: Remover o elemento que está no primeiro nó da lista, sendo que a lista possui.
Árvore Binária de Busca
Árvores B Obs: Uma árvore 2-3 é uma árvore B de ordem 1.
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
– Aula 20 Adaptado por Reinaldo Fortes para o curso de
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Revisão IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Allan Jefferson.
Árvores Vermelho-Preto
Definição: Uma árvore binária vazia é sempre balanceada por altura. Se T não é vazia e TL e TR são suas sub-árvores da esquerda e direita, então T é balanceada.
Árvores AVL Balanceadas (Árvore Binária Balanceada)
Bernhard Gross André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Prof. Hilton Cardoso Marins Junior
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Árvores AVL Algoritmos e Estruturas de Dados - IF672
Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos.
Estruturas Avançadas de Dados UNISINOS
AULA 21 Profa. Sandra de Amo BCC - UFU
AVL Árvores Equilibradas Sumário AVL Splay B Vermelho-Preto AA e BB Multidimensionais quaternárias k-d [Pesquisa Lexicográfica tries multivia tries binárias.
Árvores de Busca Binária
1 de outubro de Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.
Árvores Balanceadas (AVL)
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.
BANCO DE DADOS II Árvore de Dados. FATEC - GUARATINGUETÁ Professor: Eduardo Barbosa Adiel Lemos Ana Renata Bruno Michael Jéssica Fernanda Layla Monique.
INE5408 Estruturas de Dados Árvores B - Estrutura e peculiaridades -Algoritmos de inserção, pesquisa e deleção.
Árvores Binárias de Pesquisa e Balanceamento usando Árvores AVL
Transcrição da apresentação:

André Lopes Pereira Luiz Carlos Barboza Júnior Árvores Balanceadas André Lopes Pereira Luiz Carlos Barboza Júnior

Roteiro Árvores de busca binárias: Organização; Algoritmos de busca, inserção e remoção em árvores de busca (custos envolvidos); Desvantagens de uma árvore desbalanceada: Aplicação de AVL; Aplicação de nó crítico e fator de equilíbrio; Rotações simples de dupla; AVL implementada em C.

Árvores de busca binária Operações: Busca Inserir Deletar Definição: Todas as chaves da sub-árvore à esquerda são menores do que a chave da raiz, e as chaves da sub-árvore à direita são maiores. Essa regra define árvore de busca binária.

Busca Busca (root, x) Entrada: root (ponteiro pra raiz da árvore) e x número a ser procurado Saída: node (ponteiro que aponta para o nó contendo x ou nil se o nó não existir) início se root = nil ou root^.key então node := root // root^ e´o conteudo do endereco de root senao se x < root^.key então Busca (root^.left,x) senão Busca (root^.right,x) fim.

Inserir Inserir (root,x) Entrada: root (ponteiro pra raiz da árvore) e x número a ser inserido Saída: árvore modificada início se root = nil então crie um novo nó apontado por child; root := child; root^.key := x; senao node := root; child := root; //para inicializar e ele nao seja null enquanto node != nil e child != nil faça se node^.key = x então child := nil senão parent := node; se x < node^.key então node := node^.left senão node := node^.right se child != nil então child^.key := x; child^.left := nil; child^.right := nil; se x < parent^.key então parent^.left := child senão parent^.right := child fim

Deletar Deletar (root,x) Entrada: root (ponteiro pra raiz ) e x número a ser deletado Saída: árvore modificada início node := root; enquanto node != nil e node^.key != x faça parent := node; se x < node^.key então node := node^.left; senão node := node^.right; se node = nil então imprima ("x não está na árvore"); sair se node != root então se node^.left = nil então se x <= parent^.key então parent^.letf := node^.right senão parent^.right := node^.right senão se node^.right = nil então se x <= parent^.key então parent^.left := node^.left senão parent^.right := node^.left senão // o caso de 2 filhos node1 := node^.left parent1 := node enquanto node^.right != nil do parent1:= node1; node1:= node1^.right; parent1^.right := node1^.left node^.key := node1^.key fim

Deletar: folhas (...) se node^.left = nil então se x <= parent^.key parent^.letf := node^.right senão parent^.right := node^.right senão se node^.right = nil então parent^.left := node^.left parent^.right := node^.left

Deletar: nó com único filho (...) se node^.left = nil então se x <= parent^.key então parent^.letf := node^.right senão parent^.right := node^.right senão se node^.right = nil então parent^.left := node^.left parent^.right := node^.left

Deletar: nó com dois filhos (...) senão // o caso de 2 filhos node1 := node^.left parent1 := node enquanto node^.right != nil do parent1:= node1; node1:= node1^.right; parent1^.right := node1^.left node^.key := node1^.key fim

Tempo de execução dos outros passos é constante Custos envolvidos Pior caso: Percorrer a árvore da raiz até a folha mais distante para localizar o nó desejado Tempo de execução dos outros passos é constante Custo O (log n) Árvore balanceada O (n) Lista encadeada AVL

AVL (Adel’son-Vel’skii e Landis) Definição: Árvore de busca binária que, para cada nó, a diferença entre as alturas de suas sub-árvores é no máximo 1

Balance Definição: Fator que indica a diferença entre a altura das sub-árvores da esquerda e da direita, precedido do sinal + (caso a da direita seja maior) ou - (caso a maior seja a da esquerda).

Balance Balance (root) Entrada: root (ponteiro pra raiz da arvore) Saída: todos os nós da árvore com o valor de balance início se root = nil altura := -1 senão root^.left = nil e root^.right = nil então altura := 0; root^.balance := 0; // se o no for um folha seu balance e´ 0 (zero) senão Esq := Balance (root^.left); Dir := Balance (root^.right); root^.balance := Dir - Esq; altura := Max (Esq, Dir); retorna (altura + 1) fim

Nó crítico (...) se balance mudou de 0 para +1 ou -1 então retorne sim se balance mudou de +1 ou -1 para 0 então retorne não se a resposta for sim então se o sim for pela direita então balance := balance + 1 se o sim for pela esquerda então balance := balance - 1 se balance => 2 ou balance <= -2 então esse é o nó crítico. Aplique a rotação de acordo com a tabela:

Rotação simples Temp := B^.dir; B^.dir := A; A^.esq := temp;

Rotação dupla Temp := B^.dir; B^.dir := B^.dir^.esq; A^.esq := B^.dir^.dir; Temp^.esq := B; Temp^.dir := A;

Conclusão Tipos de dados abstratos que manipulam estas três operações são chamados de dicionários (ordem lexicográfica); A eficiência da árvore de busca é diretamente relacionada à sua altura. A estratégia é manter a árvore com a altura mínima possível utilizando as regras de AVL;