{ = == NULL) = == NULL)

Documentos relacionados
Á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

void ins_ele (ARV_BIN_BUSCA *arv, int v) { if (!(*arv)) maketree(arv, v); else if (v<info(*arv)) /* if (v<(*arv)->info) */ ins_ele(&((*arv)->left),

Árvores. Exemplo de árvore 2-3-4

Árvores Binárias Balanceadas

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

Árvores Binárias de Busca

Á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 Binárias de Busca

Árvores de Pesquisa (Parte II)

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

Árvores Binárias de Busca

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

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

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

Linguagem C: Árvores AVL

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

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

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

Universidade Federal de Mato Grosso Estrutura de Dados II

Árvores binárias de busca

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

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

Árvores AVL. Prof. Robinson Alves

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

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

Árvores binárias de busca

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

Árvores AVL e Árvores B. Jeane Melo

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

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

Filas de Prioridade & Heaps

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

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

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

Árvores de Pesquisa (Parte II)

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

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

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

Árvores balanceadas. Aleardo Manacero Jr.

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

Á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

Pesquisa em memória primária

DAINF - Departamento de Informática

Árvores Binárias Balanceadas Estrutura de Dados I

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

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

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

ÁRVORES BALANCEADAS (AVL)

Árvores de Pesquisa (Parte II)

Árvores Genéricas de Busca

INE5408 Estruturas de Dados

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

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

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

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

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

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

ÁRVORE AVL. Problema do balanceamento

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Dicionários. TAD Orientado a conteúdo

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

Heapsort é um método de ordenação cujo princípio de funcionamento é o mesmo utilizado para a ordenação por seleção.

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

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

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

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

Árvores Rubro-Negras. Árvores Rubro-Negras. (Vermelho-Preta) Estrutura da Árvore. Estrutura da Árvore

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

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

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

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

Métodos de Ordenação Parte I

GGI026 - Árvore rubro-negra

Classificação por Particionamento

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

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

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

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

Árvores B Partes I e II

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

Árvores AVL (Adelson-Velskii and Landis)

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

Árvores Binárias de Busca

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

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

Árvores Vermelho-Preto

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

Árvores Vermelho-Preto

A Invenção da B-Tree. Árvores B Parte I. Problema. Problema. Introdução. Leandro C. Cintra Maria Cristina F. de Oliveira. Solução?

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

Algoritmos e Estruturas de Dados I. Aula 11 Árvores AVL. Prof. Jesús P. Mena-Chalco.

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

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

Árvores-B (Parte Ia) SCC-203 Algoritmos e Estruturas de Dados II. Graça Nunes

Listas Lineares Ordenadas

Busca Hierárquica em Memória

AED2 - Aula 04 Vetores ordenados e árvores de busca

Transcrição:

Com base no que foi discutido codifique uma função, na linguagem C, que implemente a remoção por cópia. void remocaoporcopia(arvorebinenc arvore) { ArvoreBinEnc prev, tmp = arvore; if (arvore->filhodir == NULL) arvore = arvore->filhoesq; else if (arvore->filhoesq == NULL) arvore = arvore->filhodir; else { tmp = arvore->filhoesq; prev = arvore; while (tmp->filhodir!=null) { prev = tmp; tmp = tmp->filhodir; } arvore->inf = tmp->inf; if (prev==arvore) prev->filhoesq = tmp->filhoesq; else prev->filhodir = tmp->filhoesq; } 54 free (tmp); }

55 Árvores Árvore Balanceada Além das árvores serem muito apropriadas para representar a estrutura hierárquica de um certo domínio, o processo de busca por um elemento em uma árvore tende a ser muito mais rápido do que em uma lista encadeada. Contudo, para que efetivamente uma busca por um determinado elemento em uma árvore seja eficiente está, além de ser uma árvore binária de busca, deve ter seus nós adequadamente distribuídos.

Árvore Balanceada Observe as árvores a seguir: (a) (b) (c) 56

Com uma análise das árvores apresentadas podemos concluir que uma grande gama de configurações de árvores binárias de busca é passível de ser obtida com um mesmo conjunto de nós e que o pior caso de uma busca por um nó está diretamente relacionado com a altura da árvore. Sendo assim, podemos estabelecer a seguinte definição: Uma árvore binária é balanceada em altura ou simplesmente balanceada se a diferença na altura de ambas as subárvores de qualquer nó na árvore é zero ou um. 57

58 Árvores Uma definição complementar é a de árvore perfeitamente balanceada. Uma árvore binária é perfeitamente balanceada quando,além de ser balanceada, todas as suas folhas encontram-se em um ou dois níveis. Para facilitar a visualização, uma árvore que possui 10.000 nós pode ser configurada em uma árvore com altura igual a lg(10000) = ceil(13.289) = 14. Ou seja, qualquer elemento é passível de ser localizado com no máximo 14 comparações se a árvore for perfeitamente balanceada.

Neste ponto cabe a seguinte pergunta: Ao se analisar uma árvore pode-se determinar qual dentre os seus nós seria uma raiz adequada para torná-la perfeitamente balanceada, qual seria este nó? O nó cuja sua chave (valor) representa a mediana das chaves presentes nos nós que compõem a árvore, para uma árvore com número impar de nós. Ou o nó cuja sua chave (valor) representa um dentre os dois valores mais próximos da mediana das chaves presentes nos nós que compõem a árvore, para uma árvore com número par de nós. Uma estratégia baseada nesta observação que pode ser utilizada para balancear uma árvore é: 59

60 Árvores Quando os dados chegarem armazene-os em um vetor. Após todos os dados terem sido armazenados no vetor, ordene-o. Agora determine como raiz o elemento do meio do vetor. O vetor consistirá agora em dois subvetores. O filho esquerdo da raiz será o nó com valor no meio do subvetor constituído do início do vetor até o elemento escolhido como raiz. Um procedimento similar é adotado para a definição do filho direito da raiz. Este processo se repete até não existirem mais elementos a serem retirados do vetor. Determine o código fonte de uma função, na linguagem C, que implementa este processo.

61 Árvores void balanceararvorebinaria (ArvoreBinEnc arvore, No vetor[], int inicio, int fim) { if (inicio <= fim) { int meio = (inicio+fim)/2; inserir(arvore, vetor[meio]); balanceararvorebinaria (arvore, vetor, inicio, meio-1); balanceararvorebinaria (arvore, vetor, meio+1, fim); } }

Dados fornecidos: 5 1 9 8 7 0 2 3 4 6 Vetor gerado e ordenado: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 62

O algoritmo apresentado possui um sério inconveniente, pois todos os dados precisam ser colocados em um vetor antes da árvore ser criada. O mesmo algoritmo também pode ser utilizado quando uma inserção ocorre sobre uma árvore já existente, porém com o mesmo inconveniente. Neste caso, os elementos da árvore devem ser retirados e colocado em um vetor, mesmo que a árvore binária de busca esteja desbalanceada, se for efetuado um percurso in-ordem elimina-se a necessidade de ordenar o vetor. Posteriormente o novo elemento é inserido em sua posição adequada no vetor e a função definida anteriormente pode ser utilizada. 63

64 Árvores Existem formas mais eficientes de se balancear uma árvore. Um exemplo é o algoritmo desenvolvido por Colin Day e posteriormente melhorado por Quentin F. Stout e Bette L. Warren. Denominado Algoritmo DSW, devido aos nomes de seus idealizadores, baseia-se em percorrer uma árvore binária de busca tornando-a uma arvore degenerada (similar a uma lista encadeada) e posteriormente percorrê-la novamente tornando-a uma árvore perfeitamente balanceada.

A seguir veremos um resumo de árvore AVL e árvore 234. Os slides que versão sobre as árvores retro aludidas foram baseados nos slides gerados pela professora Elisa Maria Pivetta Cantarelli intitulados Árvores Binárias Balanceadas. Até o momento vimos algoritmos que balanceiam árvores globalmente. Contudo o rebalanceamento pode ocorrer localmente se alguma porção da árvore for desbalanceada por uma operação de inserção ou remoção de um elemento da árvore. Um método clássico para tal foi proposto por Adel son- Vel skii e Landis e o nome dado a uma árvore modificada com este método é árvore AVL. 65

Uma árvore AVL é uma árvore binária de busca onde a diferença em altura entre as subárvores esquerda e direita de cada nó é no máximo um (positivo ou negativo). Esta diferença é chamada de fator de balanceamento (FB). O FB é acrescentado a cada nó da árvore AVL. O FB é obtido através da seguinte equação: FB(nó p) = altura(subárvore direita de p) - altura(subárvore esquerda de p) Veremos alguns exemplos de árvores AVL e árvores não AVL. 66

AVL: Árvores Árvores não AVL: 67

Ao inserirmos um novo nó em uma árvore AVL, podemos ou não violar a propriedade de balanceamento. Caso ocorra uma violação devemos rebalancear a árvore através da execução de operações de rotação sobre nós da árvore. FB 68 Árvore AVL

Após uma inserção que gere um desbalanceamento na árvore AVL podemos nos deparar com duas classes de desbalanceamento. Onde estes são identificados com base na análise dos FB s. Ao inserirmos um novo nó devemos ajustar os FB s do nó inserido até a raiz ou até encontrarmos um fator de balanceamento inaceitável, ou seja, com valor 2 ou -2. Quando o FB do nó filho com valor 1 possuir o mesmo sinal do FB de seu pai (nó com FB 2 ou -2) trata-se da classe de desbalanceamento 1, que requer apenas uma rotação simples para a árvore ser rebalanceada. 69

70 Árvores Quando o FB do nó filho com valor 1 possuir sinal oposto ao FB de seu pai (nó com FB 2 ou -2) trata-se da classe de desbalanceamento 2 que requer uma rotação dupla, ou em outras palavras, duas rotações para a árvore ser rebalanceada. Se o sinal do FB do nó que caracteriza o desbalanceamento for positivo a rotação será para a esquerda. Se o sinal do FB do nó que caracteriza o desbalanceamento for negativo a rotação será para a direita. Analisaremos agora um exemplo de cada uma das classes citadas.

Ao inserirmos o valor 3 teremos a árvore: Identificamos a classe 1, que demanda uma rotação simples à direita. Após a rotação teremos: 71

Ao inserirmos o valor 5 teremos a árvore: 72 Identificamos a classe 2, que demanda uma rotação dupla à direita. Iniciamos por uma rotação no nó filho com FB +1, no caso, com uma rotação à esquerda devido ao sinal +. Seguindo por uma rotação à direita no nó com FB -2. O que gera a seguinte seqüência de árvores:

Árvore inicial Árvore desbalanceada Árvore em processo de balanceamento Árvore balanceada 73

74 Árvores Descreva uma seqüência de passos para a construção de uma árvore AVL. 1. insira o novo nó normalmente, ou seja, da mesma maneira que insere-se um nó em uma árvore de busca balanceada; 2. iniciando com o nó pai do nó recém inserido, teste se a propriedade AVL foi violada, ou seja, atualize e teste se algum dos FB s passou a ser 2 ou -2. Temos duas possibilidades: 2.1. A condição AVL foi violada 2.1.1. Execute a operação de rotação conforme o caso (tipo 1 ou tipo 2); 2.1.2. Volte ao passo 1; 2.2. A condição AVL não foi violada, volte ao passo 1;

Vimos inicialmente um conceito mais amplo de árvore e depois o restringimos fixando o número máximo de filhos que um nó pode ter um dois. Se permitirmos a determinação de mais itens de dados e mais filhos por nó teremos como resultado árvores denominadas Multivias ou M-vias. Uma estrutura multivia com algoritmo eficiente deve considerar : - Tempo de acesso a cada nó - Balanceamento da árvore 75

Um bom exemplo de uma árvore multivia é a árvore 2-3-4. Uma árvore 2-3-4 pode ter até quatro filhos e três itens de dados por nó. Por que estudar árvores 2-3-4: - São árvores balanceadas; - São fáceis de implementar; - Servem como uma introdução para o estudo de árvores B. Exemplo de árvore 2-3-4 76

77 Árvores Em uma árvore 2-3-4 cada nó pode conter um, dois ou três itens de dados. Um nó interno deve sempre ter um filho a mais que seus itens de dados. Devido a uma árvore 2-3-4 possuir nós com até quatro filhos, ela é chamada de árvore multivias de ordem 4. Por que o 2, 3 e 4 no nome da árvore 2-3- 4? Porque estas são as quantidades possíveis de filhos que um dado nó não folha pode ter. Em uma árvore 2-3-4 um nó intermediário qualquer necessita sempre ter um filho a mais do que a quantidade de itens de dados que possui.

78 Árvores Em uma árvore binária, todos os filhos com chaves menores que a chave do nó estão enraizados no nó filho à esquerda, e todos os filhos com chaves maiores estão enraizados no nó filho à direita. Na árvore 2-3-4 o princípio é o mesmo, com alguns detalhes a mais: - todos os itens de dados na subárvore enraizada no filho 0, possuem valores menores que o da chave 0; - todos os itens de dados na subárvore enraizada no filho 1, possuem valores maiores do que o da chave 0, mas menores do que a chave 1;

- todos os itens de dados na subárvore enraizada no filho 2, possuem valores maiores do que o da chave 1, mas menores do que a chave 2; - todos os itens de dados na subárvore enraizada no filho 3, possuem valores maiores do que o da chave 2. Valores duplicados geralmente não são permitidos, o que possibilita que não nos preocupemos com comparações de chaves iguais. 79

Veremos agora um exemplo de como ocorre a pesquisa por uma chave em uma árvore 2-3-4. Simularemos a busca pela chave 64. Iniciamos a busca pela raiz e ao não entrar a chave percebemos que a chave é maior que 50 e portanto a busca segue no filho 1, o qual também não contém a chave em seus itens de dados. Como 64 está entre 60 e 70 a busca segue novamente para o filho 1. Desta vez a chave é localizada. 80

Trataremos agora do processo de inserção de uma nova chave em uma árvore 2-3-4. Por que novos itens de dados são sempre inseridos nas folhas? Porque se os itens forem inseridos em um nó com filhos, então o número de filhos necessitará ser mudado para manter a estrutura da árvore, o que estipula que esta árvore deve ter um filho a mais do que os itens de dados em um nó. O processo de inserção começa pela busca do nó folha apropriado. Se apenas nós que não estão cheios são encontrados durante a busca, a inserção é mais fácil. 81

A inserção pode envolver a movimentação de um ou dois itens de dados em um nó. As chaves deverão estar na ordem correta após o novo item ser inserido. Exemplo da inserção item 18 na árvore abaixo: 82

As inserções tornam-se mais complicadas se um nó cheio é encontrado no caminho abaixo do ponto de inserção. Quando isso ocorre o nó precisa ser dividido. É este processo de divisão que mantém a árvore balanceada. O tipo de árvore 2-3-4 que estamos estudando é freqüentemente chamado de árvore 2-3-4 top-down, por que os nós são divididos para baixo do ponto de inserção. Chamaremos os itens de dados a serem divididos de A, B e C. Assumiremos que o nó a ser dividido não é a 83 raiz, examinaremos a divisão do nó raiz depois.

84 Árvores

Quando uma raiz cheia é encontrada no início da busca para encontrar o ponto de inserção, o resultado da inserção é ligeiramente mais complicado: Um novo nó é criado, tornando-se a nova raiz, e a antiga raiz é dividida criando um novo nó irmão; O item de dado C é movido para o novo nó irmão da antiga raiz; O item de dado B é movido para a nova raiz; O item de dados A é deixado onde está; Os dois filhos mais a direita do nó que está sendo dividido são desconectados dele e conectados no novo nó do lado direito. 85

86 Árvores