Algoritmos e Estruturas de Dados 2005/2006. árvore Vermelho-Preto cada nó tem no máximo 1 filho vermelho. Árvore AA ; semelhante a árvore BB, mas:

Documentos relacionados
Algoritmos e Estruturas de Dados 2005/2006

Árvores binárias de pesquisa

Algoritmos e Estruturas de Dados 2007/2008. Ajusta a estrutura da árvore à frequência de acesso aos dados

Árvores Equilibradas. Sumário

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

Árvores de pesquisa. Árvores de pesquisa equilibradas

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

Algoritmos e Estruturas de Dados 2008/2009. Conjunto de nós e conjunto de arestas que ligam pares de nós

Algoritmos e Estruturas de Dados 2006/2007

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

Algoritmos e Estruturas de Dados 2005/2006

Árvores AVL IAED, 2014/2015

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

Estruturas de dados e algoritmos fundamentais

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Árvores Binárias de Pesquisa

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

DAINF - Departamento de Informática

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

Árvores Binárias de Busca

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

EAD Árvore - representação usando listas ligadas

Árvores Binárias de Busca

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

Árvores Binárias de Busca

Árvores binárias de busca

Algoritmos e Estruturas de Dados 2005/2006

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

PAA-DCC-UFAM. Árvores. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

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

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

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

Árvores Binárias de Busca

Funções Finitas II: árvores AVL

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

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

Árvores AVL e Árvores B. Jeane Melo

ESTRUTURAS DE DADOS E ALGORITMOS ÁRVORE BINÁRIA

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

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

INF 1010 Estruturas de Dados Avançadas

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

INF 1010 Estruturas de Dados Avançadas

Árvores binárias de busca

INF 1010 Estruturas de Dados Avançadas

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

Árvores binárias de busca

AED2 - Aula 04 Vetores ordenados e árvores de busca

ÁRVORE AVL. Problema do balanceamento

Algoritmos e Estruturas de Dados 2005/2006. Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema

Árvore binária - definição

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

Árvores binárias de busca

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

Árvores de Pesquisa (Parte I)

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

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

Listas Lineares Ordenadas

Algoritmos e Estruturas de Dados 2008/2009

Universidade Federal de Mato Grosso Estrutura de Dados II

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

GGI026 - Árvore rubro-negra

Tipo de Dados Abstracto

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:

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

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Algoritmos e Estruturas de Dados 2006/2007

Árvores Equilibradas. Árvores espalhadas (Splay)

Teoria dos Grafos Aula 8

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

Prof. Jesus José de Oliveira Neto

Copiar para o ficheiro ArvoreBinaria.h e adaptar as funções associadas às operações sobre árvores binárias (3.1 a 3.12)

Árvores Binárias Balanceadas Estrutura de Dados I

ESTRUTURAS DE DADOS (LEI, LM, LEE) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2018/2019

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

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

Algoritmos e Estruturas de Dados 2009/2010

LEIC-FEUP 2001/2002 Algoritmos e Estruturas de Dados 1. Árvores-1

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

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

Exame de Admissão. Instituto Nacional de Pesquisas Espaciais 18 de setembro de 2018 A: GABARITO

Á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

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

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

Árvores Rubro-Negra IFRN

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Análise da Complexidade de Algoritmos

Árvores Binárias de Busca

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

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas

UNIVERSIDADE DA BEIRA INTERIOR

Métodos de Ordenação Parte 3

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

3. Vectores: Algoritmos de Pesquisa. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006)

Transcrição:

Algoritmos e Estruturas de Dados 00/006 Árvore BB: árvore Vermelho-Preto cada nó tem no máximo 1 filho vermelho Árvore AA ; semelhante a árvore BB, mas: só filhos direitos podem ser vermelhos reduz casos de equilíbrio a remoção é um processo mais simples; filho único de um nó interno é vermelho: informação do nó a apagar é substituída pela menor subárvore direita em vez da cor, o nó guarda informação do nível nível = 1, em nó folha nível = nível do pai, em nó vermelho nível = nível do pai 1, em nó preto 1

Propriedades: filho esquerdo tem nível 1 unidade abaixo do pai filho direito tem nível igual ou uma unidade abaixo do pai ligação ao filho direito pode ser horizontal 1 0 8 3 40 6 80 90 Desequilíbrio da árvore pode ser originado por: ligação horizontal à esquerda (ex: inserção do valor ) ligação horizontal à direita (ex: inserção do valor 4) 3 Desequilíbrio por ligação horizontal à esquerda resolução: rotação à direita (skew) X P rotação à direita X P A B C A B C Desequilíbrio por ligação horizontal à direita resolução: rotação à esquerda (split) X R G C rotação à esquerda X R G A B C A B 4

Declaração da classe AANode template <class Comparable> class AANode Comparable element; AANode *left, *right; int level; AANode() : left(null), right(null), level(1) ; AANode(const Comparable & e, AANode *lt, AANode *rt, int lv =1) : element(e), left(lt), right(rt), level(lv) ; ; friend class AATree<Comparable>; Declaração da classe AATree e construtor template <class Comparable> class AATree AANode<Comparable> *root; const Comparable ITEM_NOT_FOUND; AANode<Comparable> *nonulo; //... ; template <class Comparable> AATree<Comparable>:: AATree(const Comparable & notfound ) : ITEM_NOT_FOUND(notFound) nonulo = new AANode<Comparable>; nonulo->left = nonulo->right = nonulo; nonulo->level = 0; root = nonulo; 6 3

classe AATree : skew e split template <class Comparable> void AATree<Comparable>::skew(AANode<Comparable> * & t) const if ( t->left->level == t->level ) rotatewithleftchild(t); template <class Comparable> void AATree<Comparable>::split(AANode<Comparable> * & t) const if ( t->right->right->level == t->level ) rotatewithrightchild(t); t->level++; 7 Inserção de um novo elemento x na árvore de raiz t se t.left.level == t.level rotação com filho esquerdo : skew se t.right.right.level == t.level rotação com filho direito : split template <class Comparable> void AATree<Comparable>:: insert(const Comparable & x, AANode<Comparable> * & t) if ( t == nonulo ) t = new AANode<Comparable>(x, nonulo, nonulo); else if ( x < t->element ) insert(x, t->left); else if ( t->element < x ) insert(x, t->right); else return; // nó repetido skew(t); split(t); 8 4

: inserção de elementos inserir 4 1 0 8 3 40 4 6 80 90 após split em 3 1 40 0 8 3 4 6 80 90 após skew em 0 1 40 0 8 3 4 6 80 90 9 : inserção de elementos após split em 40 1 40 0 8 3 4 6 80 90 após skew em e split em 0 1 40 8 3 4 6 80 90 árvore aumentou 1 nível 10

Eliminação de um elemento Nó a eliminar ou é folha, ou tem filho direito substituir pelo menor elemento da subárvore direita, que está no nível 1 procedimento a adoptar: para remover, descer na árvore mantendo registo do nó a apagar e do valor mínimo Ao chegar ao fundo da árvore, substituir o nó a eliminar pelo mínimo, e remover mínimo Ajustar nós e seus níveis, e reequilibrar a árvore se necessário 1 3 4 6 7 Se eliminar nó 1: todos os nós passam a nível 1, introduzindo ligações horizontais à esquerda. 3 chamadas a skew + chamadas a split 11 template <class Comparable> void AATree<Comparable>:: remove(const Comparable & x, AANode<Comparable> * & t) static AANode<Comparable> *lastnode, *deletednode = nonulo; if ( t!= nonulo ) // percorre árvore, instanciando deletednode e lastnode // deletednode: nó a eliminar ; lastnode: nó com valor a substituir lastnode = t; if ( x < t->element ) remove(x, t->left); else deletednode = t; remove(x, t->right); // continua... 1 6

// se fundo da árvore e x está presente, remover if ( t == lastnode ) if ( deletednode == nonulo x!= deletednode->element ) return; // elemento não existe deletednode->element = t->element; deletednode = nonulo; t = t->right; delete lastnode; else // não estamos no fundo da árvore: reequilibrar if ( ( t->left->level < t->level -1 ) ( t->right->level < t->level -1 ) ) if ( t->right->level > --t->level ) t->right->level = t->level; skew(t); skew(t->right); skew(t->right->right); split(t); split(t->right); 13 Eliminar elemento 1 1 3 4 6 7 árvore resultante: (como?) 3 4 6 7 14 7

Treaps Árvore binária de pesquisa ideia é usar aleatoriedade para tentar balancear árvores binárias de pesquisa nó da árvore: 1 elemento, apontadores para filhos, e uma prioridade geralmente, prioridades são determinadas aleatoriamente prioridade de um nó é sempre não inferior à do seu pai (como no heap de mínimo) eficiência esperada: O(log N) Inserção de um elemento inserir como folha rodar para cima até satisfazer prioridades Eliminação de um elemento procurar elemento, passar prioridade a infinito rodar para baixo com filho de menor prioridade, até ser folha, e apagar 1 Treaps Declaração da classe Treap template <class Comparable> class Treap TreapNode<Comparable> *root; const Comparable ITEM_NOT_FOUND; TreapNode<Comparable> *nonulo; public: explicit Treap(const Comparable & notf) ; Treap(const Treap & rhs); ; template <class Comparable> Treap<Comparable>::Treap(const Comparable & notf) : ITEM_NOT_FOUND(notF) nonulo = new TreapNode<Comparable>; nonulo->left = nonulo->right = nonulo; nonulo->priority = INT_MAX; root = nonulo; 16 8

Treaps classe Treap : inserção de um elemento template <class Comparable> void Treap<Comparable>:: insert(const Comparable & x, TreapNode<Comparable> * & t) if ( t == nonulo ) t = new TreapNode<Comparable>( x, nonulo, nonulo, rand() ); else if ( x < t->element ) insert(x, t->left); if ( t->left->priority < t->priority ) rotatewithleftchild(t); else if (t->element < x ) insert(x, t->right); if ( t->right->priority < t->priority ) rotatewithrightchild(t); 17 Treaps classe Treap : eliminação de um elemento template <class Comparable> void Treap<Comparable>:: remove(const Comparable & x, TreapNode<Comparable> * & t) if ( t!= nonulo ) if ( x < t->element ) remove(x, t->left); else if (t->element < x ) remove(x, t->right); else // encontrou elemento if ( t->left->priority < t->right->priority ) rotatewithleftchild(t); else rotatewithrightchild(t); if ( t!= nonulo ) remove(x,t); else delete (t->left); t->left = nonulo; 18 9