Árvores binárias de busca

Documentos relacionados
Árvores binárias de busca

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

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

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

Árvores Binárias de Busca

Árvores Binárias de Busca

Árvores AVL e Árvores B. Jeane Melo

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

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

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

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

Linguagem C: Árvores AVL

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

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

Árvores & Árvores Binárias

DAINF - Departamento de Informática

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

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

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

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

Árvores Binárias Balanceadas Estrutura de Dados I

ÁRVORE AVL. Problema do balanceamento

Estruturas de Dados com Jogos. Capítulo 9 Árvores Balanceadas

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

Árvores Vermelho-Preto

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

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Dicionários. TAD Orientado a conteúdo

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

Árvores AVL. Prof. Robinson Alves

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

Módulo 9. Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II C++ (Rone Ilídio)

Árvores Binárias de Busca

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

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

Á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

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

ÁRVORE BINÁRIA DE BUSCA

ESTRUTURA DE DADOS E ALGORITMOS ÁRVORES BALANCEADAS. Cristina Boeres

Estruturas de Dados I

Árvores Binárias de Busca

Árvore Vermelho-Preta. Estrutura de Dados II Jairo Francisco de Souza

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

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio;

Á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

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD

Á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. Estruturas de Dados. Prof. Vilson Heck Junior

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

1. Proponha algoritmos para: a. Calcular a altura dos nós de uma árvore binária dada, armazenando o valor da altura no nó.

UNILASALLE Curso de Bacharelado em Ciência da Computação. Estrutura de Dados II Prof. Magalí T. Longhi. Árvores AVL*

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

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

Árvores Binárias de Busca

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

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

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

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

Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C

INE5408 Estruturas de Dados

Pesquisa em memória primária

1. Proponha algoritmos para: a. Calcular a altura dos nós de uma árvore binária dada, armazenando o valor da altura no nó.

Árvores-B (Parte I) SCC-503 Algoritmos e Estruturas de Dados II. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira

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

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

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

Filas de Prioridade & Heaps

Linguagem Haskell. Maria Adriana Vidigal de Lima

Transcrição:

Árvores binárias de busca Introdução à Ciência de Computação II Diego R. Amancio Baseado no material do Prof. Thiago A. S. Pardo

Árvore binárias n Árvores de grau 2, isto é, cada nó tem dois filhos, no máximo Raiz B A C Terminologia: filho esquerdo filho direito informação D E F

Árvores binárias de busca (ABB) n Também chamadas árvores de pesquisa ou árvores ordenadas n Definição n Uma árvore binária com raiz R é uma ABB se: n a chave (informação) de cada nó da subárvore esquerda de R é menor do que a chave do nó R (em ordem alfabética, por exemplo) n a chave de cada nó da subárvore direita de R é maior do que a chave do nó R n as subárvores esquerda e direita também são ABBs

ABB n Exemplos R1 R2 D D B F A F A C é ABB E G B C E não é ABB G

ABB n Por que uma ABB é boa? n Imagine a situação n Sistema de votação por telefone ( Você decide ) n Cada número só pode votar uma vez n Um sistema deve armazenar todos os números que já ligaram n A cada nova ligação, deve-se consultar o sistema para verificar se aquele número já votou; o voto é computado apenas se o número ainda não votou n A votação deve ter resultado on-line

ABB n Por que uma ABB é boa? n Solução com ABBs n Cada número de telefone é armazenado em uma ABB n Suponha que em um determinado momento, a ABB tenha 1 milhão de telefones armazenados n Surge nova ligação e é preciso saber se o número está ou não na árvore (se já votou ou não)

ABB n Por que uma ABB é boa? n Considere uma ABB com chaves uniformemente distribuídas (árvore cheia)

ABB n Por que uma ABB é boa? n Responda n Quantos elementos cabem em uma árvore de N níveis, como a anterior? n Como achar um elemento em uma árvore assim a partir da raiz? n Quantos nós se tem que visitar, no máximo, para achar o telefone na árvore, ou ter certeza de que ele não está na árvore?

ABB n Por que uma ABB é boa? nível 1 nível 2 nível 3 nível 4 nível 5 nível N Nível Quantos cabem 1 1 2 3 3 7 4 15...... N 2 N - 1 10 1.024 13 8.192 16 65.536 18 262.144 20 1 milhão 30 1 bilhão...

ABB n Por que uma ABB é boa? n Para se buscar em uma ABB n Em cada nó, compara-se o elemento buscado com o elemento presente n Se menor, percorre-se a subárvore esquerda n Se maior, percorre-se subárvore direita n Desce-se verticalmente até as folhas, no pior caso, sem passar por mais de um nó em um mesmo nível n Portanto, no pior caso, a busca passa por tantos nós quanto for a altura da árvore

ABB n Exemplo: busca pelo elemento E nas árvores abaixo R1 R2 D D B F A F A C é ABB E G B C E não é ABB G 3 consultas 6 consultas

ABB n Por que uma ABB é boa? n Buscas muito rápidas!!!

ABB n Representação B D Raiz F Raiz ABB vazia A C G

ABB n Declaração similar às árvores binárias convencionais n Manipulação diferente typedef struct no { int info; } no; struct no *esq, *dir; no *raiz;

ABB n Operações sobre a ABB n Devem considerar a ordenação dos elementos da árvore n Por exemplo, na inserção, deve-se procurar pelo local certo na árvore para se inserir um elemento n Exercício n Construa a partir do início uma ABB com os elementos K, E, C, P, G, F, A, T, M, U, V, X, Z

ABB n Operações básicas n Está na árvore? n Inserção n Remoção

ABB n Está na árvore? n Comparando o parâmetro chave com a informação no nó raiz, 4 casos podem ocorrer n A árvore é vazia => a chave não está na árvore => fim do algoritmo n Elemento da raiz = chave => achou o elemento (está no nó raiz) => fim do algoritmo n Chave < elemento da raiz => chave pode estar na subárvore esquerda n chave > info(raiz) => chave pode estar na subárvore direita n Pergunta: quais os casos que podem ocorrer para a subárvore esquerda? E para a subárvore direita?

ABB n Exercício n Implementação da sub-rotina de busca de um elemento na árvore

Busca em árvore binária int busca(no *p, int x) { if (p==null) } return 0; else if (x==p->info) return 1; else if (x<p->info) return(busca(p->esq,x)); else return(busca(p->dir,x));

ABB n Inserção n Estratégia geral n Inserir elementos como nós folha (sem filhos) n Procurar o lugar certo e então inserir n Comparando o parâmetro chave com a informação no nó raiz, 4 casos podem ocorrer n A árvore é vazia => insere o elemento, que passará a ser a raiz; fim do algoritmo n Elemento da raiz = chave => o elemento já está na árvore; fim do algoritmo n Chave < elemento da raiz => insere na subárvore esquerda n Chave > elemento da raiz => insere na subárvore direita

ABB n Exercício n Implementação da sub-rotina de inserção de um elemento na árvore

Inserção int inserir(no *p, int x) { } if (p==null) { p=(no*) malloc(sizeof(no)); } p->info=x; p->esq=null; p->dir=null; return 1; else if (p->info==x) return 0; else if (x<p->info) return(inserir(p->esq,x)); else return(inserir(p->dir,x));

ABB n Remoção n Para a árvore abaixo, remova os elementos T, C e K, nesta ordem K R E P C G M T A F

ABB n Remoção n Caso 1 (remover T): o nó a ser removido (R) não tem filhos n n Remove-se o nó R aponta para NULL n Caso 2 (remover C): o nó a ser removido tem 1 único filho n Remove-se o nó n Puxa-se o filho para o lugar do pai n Caso 3 (remover K): o nó a ser removido tem 2 filhos n n n Acha-se a maior chave da subárvore esquerda R recebe o valor dessa chave Remove-se a maior chave da subárvore esquerda

ABB n Exercício para casa n Implementação da sub-rotina de remoção de um elemento da árvore

ABB n Vantagens n Se nós espalhados uniformemente, consulta rápida para grande quantidade de dados n Divide-se o espaço de busca restante em dois em cada passo da busca n O(Log N)

ABB n Análise do algoritmo: O(Log N) N=8 4 2 Log N + 1 vezes Log 8 +1 = 4 1

ABB n Contra-exemplo n Inserção dos elementos na ordem em que aparecem n A, B, C, D, E,..., Z n 1000, 999, 998,..., 1

ABB n O desbalanceamento da árvore pode tornar a busca tão ineficiente quanto a busca seqüencial (no pior caso) n O(N) n Solução?

ABB n O desbalanceamento da árvore pode tornar a busca tão ineficiente quanto a busca seqüencial (no pior caso) n O(N) n Solução? Balanceamento da árvore quando necessário!

Conceitos n Árvore estritamente binária n Os nós tem 0 ou 2 filhos A n Todo nó interno tem 2 filhos n Somente as folhas têm 0 filhos B G C D E F

Conceitos n Árvore binária completa (ou cheia) n Árvore estritamente binária n Todos os nós folha no mesmo nível A B G C D E F

Conceitos n Uma árvore binária é dita balanceada se, para cada nó, as alturas de suas duas subárvores diferem de, no máximo, 1 A A B C B C D E D E F

AVL n Árvore binária de busca balanceada n Para cada nó, as alturas das subárvores diferem em 1, no máximo n Proposta em 1962 pelos matemáticos russos G.M. Adelson-Velskki e E.M. Landis n Métodos de inserção e remoção de elementos da árvore de forma que ela fique balanceada

AVL: quem é e quem não é? (a) (b) (c) (d) (e)

AVL: quem é e quem não é? (a) (b) (c) (d) (e)

Pergunta: a árvore abaixo é AVL?

Exercício: onde se pode incluir um nó para a AVL continuar sendo AVL?

AVL n Como é que se sabe quando é necessário balancear a árvore? n Se a diferença de altura das subárvores deve ser 1, no máximo, então temos que procurar diferenças de altura maior do que isso n Possível solução: cada nó pode manter a diferença de altura de suas subárvores n Convencionalmente chamada de fator de balanceamento do nó

AVL n Fatores de balanceamento dos nós n Altura da subárvore direita menos altura da subárvore esquerda n Hd-He n Atualizados sempre que a árvore é alterada (elemento é inserido ou removido) n Quando um fator é 0, 1 ou -1, a árvore está balanceada n Quando um fator se torna 2 ou -2, a árvore está desbalanceada n Operações de balanceamento!

AVL: quem é e quem não é (a) (b) (c) 0-1 1 0 0-1 0-1 2 (d) 0 0 (e) -2 0-1 0 1-1 0 0 0 0 0-1 0 0

AVL: exemplo de desbalanceamento -1-1 0-1 0 Novo nó 0 0 Novo nó 0 1 0 0 0 0 0 0-1 0 Novo nó 1 1 Novo nó 1 2 Desbalanceou!!! 0 1 0 0 1 1 0 0 0

AVL n Controle do balanceamento n Altera-se o algoritmo de inserção para balancear a árvore quando ela se tornar desbalanceada após uma inserção (nó com FB 2 ou -2) n Rotações Se árvore pende para esquerda (FB negativo), rotaciona-se para a direita Se árvore pende para direita (FB positivo), rotacionase para a esquerda n 2 casos podem acontecer

AVL: primeiro caso n Raiz de uma subárvore com FB -2 (ou 2) e um nó filho com FB -1 (ou 1) n Os fatores de balanceamento têm sinais iguais: subárvores de nó raiz e filho pendem para o mesmo lado 8-1 0 0 4 10 inserção 8-2 -1 0 4 10 0 2 6 0 1 2 6 0 3 0

AVL: primeiro caso -2 8 4-1 0 10 1 0 2 6 0 3 Rotação do nó pai para a direita (nó com FB=-2 ou 2) 2 4 0 1 0 8 8 desce 4 sobe 6 é realocado 0 0 0 3 6 10 Pendendo para a esquerda Árvore balanceada!!!

AVL: primeiro caso n Quando subárvores do pai e filho pendem para um mesmo lado n Rotação simples para o lado oposto n Às vezes, é necessário realocar algum elemento, pois ele perde seu lugar na árvore

AVL: segundo caso n Raiz de uma subárvore com FB -2 (ou 2) e um nó filho com FB 1 (ou -1) n Os fatores de balanceamento têm sinais opostos: subárvore de nó raiz pende para um lado e subárvore de nó filho pende para o outro (ou o contrário) -1 8 4 0 0 10 inserção -2 8 4 1 0 10 0 2 6 0 0 2 6-1 5 0

AVL: segundo caso 8-2 8 1 0 4 10 0-1 2 6 Rotação do nó filho para a esquerda (nó com FB=1 ou -1) 4 6 10 5 0 6 0 2 5 Rotação do nó pai para a direita (nó com FB=-2 ou 2) 4 0 1 8 Árvore balanceada!!! 2 0 0 0 5 10

AVL: segundo caso n Quando subárvores do pai e filho pendem para lados opostos n Rotação dupla n Primeiro, rotaciona-se o filho para o lado do desbalanceamento do pai n Em seguida, rotaciona-se o pai para o lado oposto do desbalanceamento n Às vezes, é necessário realocar algum elemento, pois ele perde seu lugar na árvore

AVL n As transformações dos casos anteriores diminuem em 1 a altura da subárvore com raiz desbalanceada p n Assegura-se o rebalanceamento de todos os ancestrais de p e, portanto, o rebalanceamento da árvore toda

AVL n Novo algoritmo de inserção n A cada inserção, verifica-se o balanceamento da árvore n Se necessário, fazem-se as rotações de acordo com o caso (sinais iguais ou não) n Em geral, armazena-se uma variável de balanceamento em cada nó para indicar o FB

AVL n Declaração typedef struct no { int info; struct no *esq, *dir; int FB; } no; no *raiz;

AVL n Exercício n Inserir os elementos 10, 3, 2, 5, 7 e 6 em uma árvore e balancear quando necessário

AVL n Exercício n Inserir os elementos A, B, C,..., J em uma árvore e balancear quando necessário