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

Documentos relacionados
Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

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

EAD Árvore - representação usando listas ligadas

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Árvores Equilibradas. Sumário

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Linguagem Haskell. Maria Adriana Vidigal de Lima

Árvores de pesquisa. Árvores de pesquisa equilibradas

INE5408 Estruturas de Dados

Árvores Binárias de Busca

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

Árvores AVL e Árvores B. Jeane Melo

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

DAINF - Departamento de Informática

Á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 Rubro-Negra IFRN

ÁRVORE BINÁRIA DE BUSCA

Introdução à Programação Aula 16 Mais exemplos de recursão

ESTRUTURA DE DADOS E ALGORITMOS ÁRVORES BALANCEADAS. Cristina Boeres

Pedro Vasconcelos DCC/FCUP. Programação Funcional 19 a Aula Raciocinar sobre programas

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 AVL (Adelson-Velskii and Landis)

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

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

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

Árvores Binárias de Busca

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

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

Árvores binárias de busca

Linguagem C: Árvores AVL

AED2 - Aula 04 Vetores ordenados e árvores de busca

Introdução à Programação / Programação I

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções

Algoritmos e Estruturas de Dados 2005/2006

ÁRVORE AVL. Problema do balanceamento

Programação Funcional Aulas 5 & 6

Programação Funcional 14 a Aula Classes de tipos revisitadas

Árvores binárias de busca

Árvores binárias de busca

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

Dicionários. TAD Orientado a conteúdo

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

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

Árvores Binárias Balanceadas Estrutura de Dados I

Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP

Árvores AVL IAED, 2014/2015

Problemas com ABP Desbalanceamento progressivo

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

ESTRUTURA DE DADOS DCC013. Árvore Binária de Busca

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

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

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

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

Árvores binárias de busca

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

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

PROGRAMAÇÃO III (LTSI)

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

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

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

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

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

INF1010 Lista de Exercícios 2

GGI026 - Árvore rubro-negra - Remoção

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior

Árvores AVL. Prof. Robinson Alves

UFJF - DCC - Estrutura de Dados e Laboratório de Programação II

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

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

Algoritmos e Estruturas de Dados. Décima primeira aula: Árvores chanfradas

Aula 10 Árvores Adelson-Velskii e Landis

Universidade Federal de Mato Grosso Estrutura de Dados 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.

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

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

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 17 a Aula Tipos abstratos

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

Estruturas de Dados II

ÁRVORES BALANCEADAS (AVL)

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

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

MCTA001 Algoritmos e Estruturas de Dados I. Aula 08 Árvores (parte 1) Laboratório

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

Dicionários: B-Trees

ESTRUTURA DE DADOS LISTAS LINEARES

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

2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.

Árvores Vermelho-Preto

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

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

Árvores Vermelho-Preto

AED1 - Árvores. Hebert Coelho. Instituto de Informática Universidade Federal de Goiás. HC AED1-Árvores 1/49

Programação Funcional 13 a Aula Tipos abstratos

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

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

Transcrição:

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

Aula anterior Operações sobre árvores binárias ordenadas: 1 pesquisa; 2 inserção; 3 remoção. Estas operações são mais eficientes sobre árvores equilibradas (menor altura). A inserção e remoção preservam a ordenação mas não preservam o equilíbrio.

Nesta aula Vamos ver árvores binárias que preservam as duas propriedades: ordenação: o valor em cada nó é maior que os valores à esquerda e menor que os valores à direita; equilíbrio: em cada nó a altura das sub-árvores esquerda e direita difere 1 no máximo. Tais estruturas de dados designam-se árvores de pesquisa auto-equilibradas.

Árvores AVL Primeiras árvores de pesquisa auto-equilibradas (Adelson-Velskii e Landis, 1962). Mantêm automáticamente as propriedades de ordenação e equilíbrio. A pesquisa é efetuada como anteriormente. Após cada inserção ou remoção efetuamos rotações da árvore para re-establecer o equilíbrio (se necessário). Vamos seguir a apresentação no capítulo 9 do livro de Bird e Wadler (ver bibliografia).

Árvores AVL (cont.) A declaração de tipo é idêntica às árvores de pesquisa simples. data Arv a = No a (Arv a) (Arv a) Vazia

Árvores AVL (cont.) Necessitamos de funções auxiliares para calcular a altura e o desvio de uma árvore (a diferença entre a altura esquerda e direita). altura :: Arv a -> Int altura Vazia = 0 altura (No _ esq dir) = 1 + max (altura esq) (altura dir) desvio :: Arv a -> Int desvio Vazia = 0 desvio (No _ esq dir) = altura esq - altura dir

Propriedade AVL Propriedade AVL Para cada sub-árvore duma árvore AVL, o desvio só pode ser 1, 0 ou 1. Esta propriedade é invariante: assumimos que é válida antes de qualquer operação; vamos garantir que é preservada após a operação.

Árvores AVL: pesquisa A pesquisa é feita exactamente como no caso de árvores simples. pesquisaavl :: Ord a => a -> Arv a -> Bool pesquisaavl x Vazia = False pesquisaavl x (No y esq dir) x==y = True x<y = pesquisaavl x esq x>y = pesquisaavl x dir Como a árvore não é modificada, a propriedade AVL é mantida trivialmente.

Árvores AVL: inserção A inserção dum valor numa árvore binária pode modificar o desvio de alguma sub-árvore para 2 ou 2; nesses casos vamos efectuar rotações para corrigir o desvio. Seja t = (No _ t _) a sub-árvore tal que desvio t = 2: se desvio t é 1 ou 0: efectuamos uma rotação simples de t para a direita; se desvio t = 1: efectuamos duas rotações; primeiro rodamos t para a esquerda e depois rodamos t para a direita. O caso em que desvio t = 2 é simétrico.

Rotação simples à direita Diagrama (anotando cada nó com a sua altura): h + 2 h + 1 h[h + 1] h t 3 h + 1 h + 1[h + 2] t 1 h[h + 1] h t 1 t 2 t 2 t 3 Note que a raiz da árvore resultante tem desvio 0 ou -1 e a sub-árvore direita têm desvio 1 ou 0.

Rotações simples: implementação rodar_dir :: Arv a -> Arv a rodar_dir (No x (No y t1 t2) t3) = No y t1 (No x t2 t3) rodar_dir t = t -- identidade nos outros casos rodar_esq :: Arv a -> Arv a rodar_esq (No x t1 (No y t2 t3)) = No y (No x t1 t2) t3 rodar_esq t = t -- identidade nos outros casos

Propriedades das rotações Notar que as rotações preservam a ordem entre valores, i.e. para qualquer árvore t temos: listar t = listar (rodar_dir t) listar t = listar (rodar_esq t) Em particular: se t é uma árvore ordenada, então rodar_dir t e rodar_esq t também são ordenadas.

Rotação composta (esquerda-direita) Configuração inicial: h + 2 h h h + 1 t 4 t 1 h[h 1] h[h 1] t 2 t 3

Rotação composta (esquerda-direita) (cont.) Após a 1 a rotação para a esquerda: h + 2 h h + 1 h[h 1] t 4 h h[h 1] t 3 t 1 t 2

Rotação composta (esquerda-direita) (cont.) Após a 2 a rotação para a direita: h + 1 h + 1 h h[h 1] h[h 1] h t 1 t 2 t 3 t 4 Note que a raiz tem desvio 0, a sub-árvore esquerda tem desvio 0 ou 1 e a direita 0 ou -1.

Corrigir desequilíbrio Vamos definir uma função para requilibrar uma árvore com desvio 2 usando uma ou duas rotações. corrige_dir :: Arv a -> Arv a Analogamente, definimos outra função para a situação simétrica em que o desvio é -2. corrige_esq :: Arv a -> Arv a

Corrigir desequilíbrio (cont.) corrige_dir :: Arv a -> Arv a corrige_dir (No x t1 t2) desvio t1 == -1 = rodar_dir (No x (rodar_esq t1) t2) otherwise = rodar_dir (No x t1 t2) corrige_dir t = t -- identidade noutros casos corrige_esq :: Arv a -> Arv a corrige_esq (No x t1 t2) desvio t2 == 1 = rodar_esq (No x t1 (rodar_dir t2)) otherwise = rodar_esq (No x t1 t2) corrige_esq t = t -- identidade noutros casos

Re-equilibrar a árvore A função seguinte verifica o desvio da árvore e, se necessário, aplica uma das funções de correcção. re_equilibrar :: Arv a -> Arv a re_equilibrar t d== 2 = corrige_dir t d== -2 = corrige_esq t otherwise = t where d = desvio t

Inserir um valor Modificamos agora a inserção em árvores simples para re-equilibrar a árvore após cada chamada recursiva. inseriravl :: Ord a => a -> Arv a -> Arv a inseriravl x Vazia = No x Vazia Vazia inseriravl x (No y esq dir) x==y -- já ocorre = No y esq dir x<y -- inserir à esquerda = re_equilibrar (No y (inseriravl x esq) dir) x>y -- inserir à direita = re_equilibrar (No y esq (inseriravl x dir))

Exemplo Inserir o valor 3 na seguinte árvore AVL. 5 2 6 1 4

Exemplo (cont.) Após a inserção simples, a raiz tem desvio 2 e a sub-árvore esquerda tem desvio -1... 5 2 6 1 4 3

Exemplo (cont.) Após a 1 a rotação à esquerda, a sub-árvore esquerda fica tem desvio 1... 5 1 4 6 2 3

Exemplo (cont.) Após a 2 a rotação à direita, a árvore fica equilibrada. 4 2 5 1 3 6

Remover um valor Exercício: escrever a função para remover um valor duma árvore AVL mantendo-a equilibrada. removeravl :: Ord a => a -> Arv a -> Arv a Sugestão: efectuar a remoção como no caso simples e usar as funções de rotação para re-equilibrar.

Evitar re-calcular alturas Exercício (aula TP): o cálculo dos desvios necessita da altura de cada nó; podemos evitar re-calcular guardando esta informação nos nós da árvore.