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

Documentos relacionados
Árvores de pesquisa. Árvores de pesquisa equilibradas

Árvores Equilibradas. Sumário

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

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

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

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

Universidade Federal de Mato Grosso Estrutura de Dados II

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

Árvores binárias de busca

Árvores binárias de busca

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

Árvores AVL e Árvores B. Jeane Melo

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

Á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

ÁRVORE AVL. Problema do balanceamento

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

GGI026 - Árvore balanceada

Aula 10 Árvores Adelson-Velskii e Landis

Árvores Binárias de Busca

Linguagem C: Árvores AVL

Árvores AVL. Prof. Robinson Alves

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

Árvores Binárias de Busca

Árvores Binárias Balanceadas Estrutura de Dados I

INE5408 Estruturas de Dados

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

Árvores de Pesquisa (Parte II)

Á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.

Dicionários. TAD Orientado a conteúdo

Árvores Vermelho-Preto

Árvores Vermelho-Preto

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

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

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

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

Aula 13 Árvores Adelson-Velskii e Landis

Árvores de Pesquisa (Parte II)

ESTRUTURA DE DADOS E ALGORITMOS ÁRVORES BALANCEADAS. Cristina Boeres

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

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

EAD Árvore - representação usando listas ligadas

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

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

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

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

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

{ = == NULL) = == NULL)

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

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

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

Árvores de Pesquisa (Parte II)

Árvores Binárias de Busca

Árvores balanceadas. Aleardo Manacero Jr.

GGI026 - Árvore rubro-negra

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

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

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

Árvores AVL (Adelson-Velskii and Landis)

Á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 Estruturas de Dados 2005/2006

INF1010 Lista de Exercícios 2

Árvores Binárias de Busca

Algoritmos e Estruturas de Dados: Árvore Binária de Busca

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

8. ÁRVORES ÁRVORES Niv 1 Niv 2 Niv 3 Niv 4. Até Introdução

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

Árvores AVL IAED, 2014/2015

DAINF - Departamento de Informática

Árvores AVL. Prof. Othon M. N. Batista Estrutura de Dados

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

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

Árvores de Pesquisa (Parte I)

Árvores Rubro-Negra IFRN

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

ÁRVORES BALANCEADAS (AVL)

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

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas

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

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

Problemas com ABP Desbalanceamento progressivo

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

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

Árvores binárias de busca

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

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

Aula 19 Árvores Rubro-Negras

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

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

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

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

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

Linguagem Haskell. Maria Adriana Vidigal de Lima

Árvores Binárias Balanceadas

INF 1010 Estruturas de Dados Avançadas

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

Splaying Tree (Árvore espalhada) Estrutura de Dados II Jairo Francisco de Souza

Arvores binárias. Fonte: PF 14 pf/algoritmos/aulas/bint.html

Transcrição:

Árvores AVL Estrutura de Dados II Jairo Francisco de Souza

Introdução As árvores binárias de pesquisa são projetadas para um acesso rápido à informação. Idealmente a árvore deve ser razoavelmente equilibrada e a sua altura será dada (no caso de estar completa) por h=log 2 (n+1) O tempo de pesquisa tende a O(log 2 N) Porém, com sucessivas inserções de dados principalmente ordenados, ela pode se degenerar para O(n)

Conceito de balanceamento Árvores completas são aquelas que minimizam o número de comparações efetuadas no pior caso para uma busca com chaves de probabilidades de ocorrências idênticas. Contudo, para garantir essa propriedade em aplicações dinâmicas, é preciso reconstruir a árvore para seu estado ideal a cada operação sobre seus nós (inclusão ou exclusão).

Conceito de balanceamento Exemplo: 8 4 12 2 6 10 14 1 3 5 7 9 11 13 Suponha a inclusão da chave 0 (zero).

Conceito de balanceamento Exemplo: 8 4 12 2 6 10 14 1 3 5 7 9 11 13 0

Conceito de balanceamento Exemplo: 4 8 12 2 6 10 14 1 3 5 7 9 11 13 0 7 3 11 1 5 9 13 0 2 4 6 8 10 12 14

Conceito de balanceamento Para reorganizar a árvore anterior, foi utilizada uma abordagem O(n), no pior caso. Naturalmente, essa é uma péssima solução, uma vez que operações como inserção e remoção geralmente são efetuados em O(logn) passos. Por esse motivo, árvores completas não são recomendadas para aplicações que requeiram estruturas dinâmicas.

Conceito de balanceamento Alternativa: utilizar um determinado tipo de árvore binária cujo pior caso para a busca não seja necessariamente tão pequeno quanto o mínimo 1 + lower_bound(logn) passos pela árvore completa. Contudo, a altura dessa árvore deve ser da mesma ordem de grandeza que a altura de uma árvore completa com o mesmo número de nós. Ou seja, deve possuir altura O(logn) para todas as suas subárvores.

Árvore AVL A AVL (Adelson-Velskii e Landis 1962) é uma árvore altamente balanceada, isto é, nas inserções e exclusões, procura-se executar uma rotina de balanceamento tal que as alturas das sub-árvores esquerda e sub-árvores direita tenham alturas bem próximas Definição Uma árvore AVL é uma árvore na qual as alturas das subárvores esquerda e direita de cada nó diferem no máximo por uma unidade. Fator de balanceamento Altura da subárvore direita - altura da subárvore esquerda

Exemplo Nível 1 Nível 2 Nível 3 Nível 4 Nível 5

Árvore AVL Em uma árvore AVL, para todo nó, seja hd a altura de uma subárvore direita e he a altura de uma subárvore esquerda de um nó: hd he є {0, 1, -1} Se o fator de balanceamento de qualquer nó ficar menor do que -1 ou maior do que 1 então a árvore tem que ser balanceada.

Rotações em AVL Na inserção utiliza-se um processo de balanceamento que pode ser de 2 tipos gerais: Rotação simples Rotação dupla

Rotações simples k2 é nó mais profundo onde falha o equilíbrio sub-árvore esquerda está 2 níveis abaixo da direita

Rotações dupla Rotação simples não resolve o desequilíbrio! sub-árvore Q está a 2 níveis de diferença de R sub-árvore Q passa a estar a 2 níveis de diferença de P

Rotações dupla Uma das subárvores B ou C está 2 níveis abaixo de D k2, a chave intermédia, fica na raiz posições de k1, k3 e subárvores completamente determinadas pela ordenação

Rotações em AVL Na inserção utiliza-se um processo de balanceamento que pode ser de 4 tipos específicos: RR caso Right-Right (rotação a esquerda) LL caso Left-Left (rotação a direita) LR caso Left-Right (rotação esquerda-direita) RL caso Right-Left (rotação direita-esquerda)

Caso Right-Right (rotação a esquerda)

Caso Left-Left (rotação a direita)

Left-Right (rotação esquerda-direita)

Caso Right-Left (rotação direita-esquerda)

Fator de Balanceamento Coeficiente que serve como referência para verificar se uma árvore AVL está ou não balanceada O fator é calculado nó a nó e leva em consideração a diferença das alturas das sub-árvores da direita e da esquerda Genericamente FB = he - hd

Exemplo FB de cada nó +2-1 0 0 +1 0

Quando balancear? Sempre que existir um fator de balanceamento superior a +1 ou inferior a -1 Caso exista mais de um nó que se encaixe neste perfil deve-se sempre balancear o nó com o nível mais alto Como balancear? Utilizando os processos: Right-Right Left-Left Left-Right Right-Left

Tipos de Balanceamento - RR Suponha na figura que a última célula a ser inserida foi a célula de chave 90-2 0 0 + 2-1 -1 0

Tipos de Balanceamento - RR O nó X que está no nível do meio dos três envolvidos toma o lugar do nó com FB=-2 A sub-árvore direita do nó X permanece A sub-árvore esquerda do nó X será colocada como sub-árvore direita do nó Y O filho esquerdo do nó X aponta para o nó Y

Tipos de Balanceamento - RR

Tipos de Balanceamento - RR static Node rotacaorr(node y) { Node x = y.right; y.right = x.left; x.left = y; return x; }

Tipos de Balanceamento - LL Suponha na figura que a última célula a ser inserida foi a célula de chave 5 +2 +1 +1 + 2 0 0 0

Tipos de Balanceamento - LL O nó X que está no nível do meio dos três envolvidos toma o lugar do nó com FB=-2 A sub-árvore esquerda do nó X permanece A sub-árvore direita do nó X será colocada como sub-árvore esquerda do nó Y O filho direito do nó X aponta para o nó Y

Tipos de Balanceamento - LL

Tipos de Balanceamento - LL static Node rotacaoll(node y) { Node x = y.left; y.left = x.right; x.right = y; return x; }

Tipos de Balanceamento - LR Suponha na figura que a última célula a ser inserida foi a célula de chave 35 +2 0-1 + 2 +1 0 0

Tipos de Balanceamento - LR O nó que está no nível mais alto das três envolvidas (nó X) toma o lugar da célula cujo fator de balanceamento é +2 (nó Y) A sub-árvore direita do nó X será colocada como sub-árvore esquerda do nó Y A sub-árvore esquerda do nó X será colocada como sub-árvore direita do nó Z O filho direito do nó X aponta para o nó Y O filho esquerdo do nó X aponta para o nó Z

Tipos de Balanceamento - LR

Tipos de Balanceamento - LR static Node rotacaolr(node y) { y.left = rotacaorr(y.left); return rotacaoll(y); }

Tipos de Balanceamento - RL Suponha na figura que a última célula a ser inserida foi a célula de chave 75-2 0 +2 + 1-1 0 0

Tipos de Balanceamento - RL O nó que está no nível mais alto das três envolvidas (nó X) toma o lugar da célula cujo fator de balanceamento é -2 (nó Y) A sub-árvore direita do nó X será colocada como sub-árvore esquerda do nó Z A sub-árvore esquerda do nó X será colocada como sub-árvore direita do nó Y O filho direito do nó X aponta para o nó Y O filho esquerdo do nó X aponta para o nó Z

Tipos de Balanceamento - RL

Tipos de Balanceamento - RL static Node rotacaorl(node y) { y.right = rotacaoll(y.right); return rotacaorr(y); }

Árvore AVL Mais exemplos... Inserção de 1, 2 e 3. Ao inserir 3, o nó raiz fica desbalanceado (+2) Rotação à esquerda

Árvore AVL Inserção do 4 e 5. 4: sem problemas 5: desbalanceamento do nó 3 (+2) Rotação à esquerda

Inserção do 6 Árvore AVL Nó 2 fica desbalanceado (+2) Rotação à esquerda

Inserção do nó 7 Árvore AVL Nó 5 fica desbalanceado (+2) Rotação à esquerda

Inserção de 15 e 14 Árvore AVL Rotação dupla: 14 e 15 à direita e depois 7 e 14 à esquerda.

Árvore AVL Inserção do 13 Rotação do 7 e 14 à direita Rotação de 6 e 7 à esquerda

Inserção do 12 Árvore AVL Rotação da raiz à esquerda

Inserção do 11 Árvore AVL Rotação de 12 e 13 à direita

Algoritmo Algoritmo recursivo Inserir nó com chave X numa árvore A recursivamente, inserir na subárvore conveniente de A, SA se a altura de SA não se modifica: terminar se a altura de SA é modificada: se ocorre desequilíbrio em A, fazer as rotações necessárias para reequilibrar Comparação de alturas para evitar o cálculo repetido de alturas de sub-árvores, pode-se manter em cada nó o resultado da comparação das alturas das sub-árvores Algoritmo iterativo Especificar parada logo que uma rotação é realizada Na prática, são usadas outras árvores binárias equilibradas (como as árvores vermelho-preto) em que a inserção ou remoção e a correspondente reposição do equilíbrio pode ser feito mais eficientemente

Importante Na inserção, caso a árvore AVL esteja desbalanceada, basta 1 operação de rotação para rebalanceá-la. Na remoção, caso a árvore esteja desbalanceada, pode ser necessário até log(n) operações de rotação.

Como descobrir qual rotação deve ser realizada? Processo simples (supondo que cada nó guarda seu fator de balanceamento): void AVLTree<tipo>::balanceia(Celula *&x) { if (x->b == 2) { if (x->esq->b == -1) rotateleft(x->esq); rotateright(x); } else if (x->b == -2) { if (x->dir->b == 1) rotateright(x->dir); rotateleft(x); } }

Exercícios Construir uma AVL com as chaves: (10, 20, 30, 5, 3, 50, 40, 70, 60, 90) Construir uma AVL com as chaves: (PSC, INF, ENG, QUI, MAT, LET, MED, ECO, ADM)