Métodos de Pesquisa de Dados (II) Árvore N-ária de Pesquisa

Documentos relacionados
Árvores. Árvores M-Vias. Métodos de Pesquisa de Dados. de Pesquisa (ANP) VANTAGENS EXEMPLO

Métodos de Pesquisa de Dados

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

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

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

Ordenação de Dados. Ordenação de Dados

Árvores binárias de busca

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Listas Encadeadas (2) Lista Classificada Encadeada

Estruturas de Dados II

Ordenação de Dados (III) HeapSort

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

Árvores. N-árias, Binárias, Busca. Vanessa Maia Berny Mestrado em Ciência da Computação

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

Métodos de Pesquisa de Dados (III) Hashing

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

Árvores binárias de busca

Ordenação de Dados (IV) MergeSort

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

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

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

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

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

Árvores Binárias de Busca

Acesso Sequencial Indexado

Universidade Federal de Mato Grosso Estrutura de Dados II

Árvores binárias de busca

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

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

Árvores Binárias de Busca

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

Pesquisa em memória primária

B-tree. B-Trees. Estrutura do nodo da B-tree. Balanceamento. Disposição dos elementos ordenados na B-tree. Exemplo de uma B-tree de ordem 3

Árvores AVL e Árvores B. Jeane Melo

Listas como Vetores. Modelagem Física de Listas

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

UFSC-CTC-INE INE Estruturas de Dados. Pilhas. Prof. Ronaldo S. Mello 2002/2. Pilha

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

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

Pesquisa em Memória Secundária. Prof. Jonas Potros

ÁRVORE AVL. Problema do balanceamento

Linguagem C: Árvores AVL

Á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

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

Universidade Estadual do Oeste do Parana - UNIOESTE Jhonata R.de Peder Marcelo Schuck

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

DAINF - Departamento de Informática

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

AED2 - Aula 04 Vetores ordenados e árvores de busca

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

(a) todos os nós irmãos da árvore m-ária são interligados; (b) todas as conexões pai-filho são removidas, exceto a primeira de cada grupo.

Conceitos gerais Terminologia Forma de Representação de Árvores Árvores Binárias

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

Á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

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

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

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

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

Árvores Binárias de Pesquisa (ABP) INF01203 Estruturas de Dados. Operações. Árvores Binárias de Pesquisa (ABP) Caminhamento Central à Esquerda

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

ESTRUTURA DE DADOS E ALGORITMOS ÁRVORES BALANCEADAS. Cristina Boeres

Árvores Binárias. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 17/03/2015

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

Análise e Complexidade de Algoritmos

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

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

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Sumário. Índices Ordenados: Nível Único. Índices Primários. Bancos de Dados Avançados Índices. Índices: Ordenados em nível único Multiníveis

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

Universidade Federal de Mato Grosso

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

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

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

Árvores B. Árvore B (ou melhor B+)

Estruturas de Dados com Jogos. Capítulo 8 Árvores

Fundamentos de Algoritmos

UFSC-CTC-INE INE Estruturas de Dados. Deques. Prof. Ronaldo S. Mello 2002/2. Deques. Um deque é uma especialização de uma fila:

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

SCC-503 Algoritmos e Estruturas de Dados II. Modificado por Moacir Ponti Jr, do original de:

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

BCC202 - Estrutura de Dados I

Pesquisa em Árvores Digitais. Adaptado de David M.

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

Estruturas de Informação Árvores B ÁRVORES B

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

Dicionários. TAD Orientado a conteúdo

Estruturas de Dados. Profº Carlos Alberto Teixeira Batista

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

Árvores & Árvores Binárias

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

Aula 18 Árvores B e parâmetros de compilação

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

Árvores & Árvores Binárias

INF 1010 Estruturas de Dados Avançadas

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II

Ordenação e Busca em Arquivos

Transcrição:

UFSC-CTC-INE INE5384 - Estruturas de Dados Métodos de Pesquisa de Dados (II) Prof. Ronaldo S. Mello 2002/2 Árvore N-ária de Pesquisa Uma Árvore N-ária de Pesquisa (ANP) é uma árvore que: contém m subárvores e n chaves, sendo n = m -1 e 2 <= m <= N todas as chaves estão ordenadas, ou seja, dado um conjunto de chaves ch 1, ch 2,..., ch i,..., ch n, nesta ordem, tem-se: ch i < ch i+1 1

Exemplo de ANP N = 4 3 9 22 27 63 71 88 100 33 44 49 51 52 74 77 83 35 38 43 Vantagens de uma ANP Indexação de um grande volume de dados N = 3 h(a) = 0 2 chaves h(a) = 1 2 + 3.2 = 8 chaves h(a) = 2 2 + 3.2 + 3.2.2 = 26 chaves h(a) = x N x+1-1 chaves Quanto maior o N, maior é o número de chaves que se pode indexar e conseqüentemente, encontra-se uma chave com menos acessos à arvore 2

Vantagens de uma ANP N pode ser equivalente ao fator de bloco de disco torna mais eficiente o número de acessos a disco para a carga de dados e busca de chave de/em um arquivo de índices de um BD exemplo: fator de bloco = x bytes nodo de ANP c/127 chaves se N = 128 cada acesso traz um nodo da ANP assim: 1 0 acesso ao arquivo de índice 127 chaves 2 0 acesso 127 2-1 chaves n 0 acesso 127 n -1 chaves Modelagem Física subárvore 0 subárvore 1 subárvore 2 subárvore N-2 subárvore N-1 chave 1 chave 2 chave N-1... dado 1 dado 2 dado N-1 SubANP 0 SubANP 1 SubANP2 SubANP N-2 SubANP N-1 Subárvore i mantém todas as chaves maiores que chave i e menores que chave i+1 3

Implementação nrochaves 6 chave 12 39 51 77 89 102 dado d 1 d 2 d 3 d 4 d 5 d 6 subárvore ANP 0 ANP 1 ANP 2 ANP 3 ANP 4 ANP 5 ANP 6 3 7 10............ 13 15 22 27 34 38 Implementação Classe ÁrvoreNáriaPesquisa nrochaves inteiro; chave Object[ ]; dado Object[ ]; subárvore ÁrvoreNáriaPesquisa[ ]; construtor ÁrvoreNáriaPesquisa (N inteiro); se N < 2 então Exceção GrauInválido(); nrochaves 0; chave NOVO Object[N]; dado NOVO Object[N]; subárvore NOVO ÁrvoreNáriaPesquisa[N]; 4

Implementação Classe ÁrvoreNáriaPesquisa nrochaves inteiro; chave Object[ ]; dado Object[ ]; subárvore ÁrvoreNáriaPesquisa[ ]; método obtémn() retorna inteiro; retorna subárvore.lenght; Observação Para fins de simplificação dos algoritmos de manipulação da ANP, pressupõe-se que toda chave existente em um nodo folha possui subárvores vazias em ambos os lados (nodos com nrochaves = 0) 3 9 22 27 63 5

Operações em uma ANP Pesquisa pesquisa todos os nodos pesquisa por valor de chave Incluir(chave, dado) Excluir(chave) Pesquisa Todos os Nodos Busca in-ordem em profundidade retorna ordenadamente todas as chaves 3 9 22 27 63 71 88 33 6

Pesquisa Todos os Nodos Busca in-ordem em profundidade retorna ordenadamente todas as chaves 1 0 3 9 22 27 63 71 88 33 3-9 Pesquisa Todos os Nodos Busca in-ordem em profundidade retorna ordenadamente todas as chaves 2 0 3 9 22 27 63 71 88 33 3-9-13 7

Pesquisa Todos os Nodos Busca in-ordem em profundidade retorna ordenadamente todas as chaves 3 0 3 9 22 27 63 71 88 33 3-9-13-22-27-33- Pesquisa Todos os Nodos Busca in-ordem em profundidade retorna ordenadamente todas as chaves 3 9 22 27 63 71 88 33 3-9-13-22-27--54-63-71-88- Complexidade: O(n) n = número de chaves 8

Pesquisa Todos os Nodos Método buscaprofundidade(); i inteiro; se this NULL e nrochaves 0 então para i de 1 até nrochaves faça subárvore[i-1].buscaprofundidade(); visita(chave[i]); visita(dado[i]); subárvore[i].buscaprofundidade(); Pesquisa Por Chave Mesmo princípio da pesquisa na ABP chave < chave pesquisada pesquisa ESQ chave > chave pesquisada pesquisa DIR complexidade adicional varredura das chaves em cada nodo da ANP Tipos de pesquisa Busca Seqüencial(chave) Busca Binária(chave) 9

Busca Seqüencial Como proceder? exemplo: chave = 33 > 13 E < 54 3 9 22 27 63 71 88 33 Busca Seqüencial Como proceder? exemplo: chave = 33 > 27 E < 3 9 22 27 63 71 88 varredura 33 10

Busca Seqüencial Como proceder? exemplo: chave = 33 3 9 22 27 63 71 88 33 achou! Busca Seqüencial Método buscaseqüencial(ch object) retorna dado; i, subarv inteiro; se nrochaves = 0 então Exceção ChaveInexistente(); para i de 1 até nrochaves faça /* varredura */ se chave[i] = ch então retorna dado[i]; se chave [i] > ch então /* deve ir para a subarv à ESQ */ subarv i 1; i nrochaves + 1; /* sai do para-faça */ retorna subárvore[subarv].buscaseqüencial(ch); 11

Complexidade: Busca Seqüencial cada varredura em um nodo: pesquisa N-1 chaves O(N-1) O(N) para encontrar o nodo na ANP: pior caso: navega no maior caminho na árvore = h(a) Propriedade (P4): h(a) = log N n O( log N n ) O(log N n) complexidade: h(a). (N-1) O(N log N n) Busca Binária Trata de forma mais eficiente a varredura das chaves em um nodo, considerando o fato das chaves estarem ordenadas Exemplo: N = 10 e chave = 54 0 1 2 3 4 5 6 7 8 9 chave: 9 13 22 33 54 63 71 88 12

Busca Binária Princípio de funcionamento: chave = 54 limiteesq: 1 limitedir: 9 metade: (1+9)/2 = 5 0 1 9 2 3 13 22 chave > 4 33 5 6 54 7 63 8 71 9 88 limiteesq: 5 limitedir: 9 metade: (5+9)/2 = 7 0 1 9 2 13 3 22 4 33 5 6 54 7 63 8 71 9 88 chave < 63 limiteesq: 5 limitedir: 6 metade: (5+6)/2 = 6 0 1 9 2 13 3 22 4 33 5 6 54 7 63 8 71 9 88 chave = 54 (achou!) Características: a cada iteração: Busca Binária se chave > metade busca em [metade;limdir] se chave < metade busca em [limesq;metade-1] se não achou a chave: pára sempre no nodo anterior mais próximo busca continua na subárvore DIR (SubÁrvore[metade]) limiteesq: 5 limitedir: 5 metade: (5+5)/2 = 5 0 1 9 2 13 3 22 4 33 5 6 54 7 63 8 71 9 88 exemplo: chave = 52 (não achou!) buscabinária em Subárvore[5] 13

Busca Binária Método buscabinária(ch object) retorna dado; índice inteiro; se this = NULL ou nrochaves = 0 então Exceção ChaveInexistente(); índice obtémíndice(ch); se índice > 0 e chave[índice] = ch então retorna dado[índice]; retorna subárvore[índice].buscabinária(ch); Busca Binária Método obtémíndice(ch object) retorna inteiro; esq, dir, metade inteiro; /* se chave menor que todas as chaves no nodo, ir para Subárv ESQ */ /* índice = 0 */ se ch < chave[1] então retorna 0; esq 1; dir nrochaves; enquanto (esq < dir) faça /* executa até que ambos apontem para a ínício mesma chave */ metade (esq + dir) / 2 ; se ch < chave[metade] então dir metade 1 senão esq metade; retorna esq; 14

Complexidade: Busca Binária varredura em um nodo: pesquisa log 2 N-1 chaves O( log 2 N-1 ) O(log 2 N) 0 1 2 3 4 5 6 7 8 9 9 13 22 33 54 63 71 88 22 63 pior caso: h(a) = log 2 N-1 13 33 54 88 complexidade: h(anp). (N-1) O(log 2 N log N n) 9 71 Comparação Busca seqüencial complexidade: O(N log N n) Busca binária complexidade: O(log 2 N log N n) 15

Inclusão em uma ANP Mesmo princípio da inclusão em uma ABP busca a posição na qual a chave deve ser inserida (nodo mais próximo com espaço para a colocação da chave) no nodo em que a chave for inserida, o vetor deve ser rearranjado (deslocamento de chaves, dados e subárvores) para a sua correta colocação Inclusão em uma ANP Exemplo: chave = 18 chave < 54 3 9 22 37 63 71 88 26 16

Inclusão em uma ANP Exemplo: chave = 18 3 9 22 37 63 71 88 chave < 22 e existe vaga no nodo! 26 Inclusão em uma ANP Exemplo: chave = 18 3 9 18 22 37 63 71 88 deslocamento + inserção + definição novo nodo vazio à direita 26 17

Inclusão em uma ANP Exemplo2: chave = 90 chave < 90 3 9 18 22 37 63 71 88 26 Inclusão em uma ANP Exemplo2: chave = 90 chave > 88 3 9 18 22 37 63 71 88 26 90 povoa um nodo vazio, definindo uma subárvore à esquerda e à direita 18

Método inclui(ch object, d object); índice, i inteiro; Inclusão se nrochaves = 0 então /* chegou em um nodo vazio */ subárvore[0] NOVO ÁrvoreNáriaPesquisa(obtémN()); chave[1] ch; dado [1] d; subárvore[1] NOVO ÁrvoreNáriaPesquisa(obtémN()); nrochaves 1; fim senão /* chegou em um nodo com chaves */... Inclusão Método inclui(ch object, d object);... senão /* chegou em um nodo com chaves */ índice obtémíndice(ch); /* busca posição para inserção */ se índice 0 e ch = chave[índice] então Exceção ChaveDuplicada(); se nrochaves < obtémn() 1 então /* existe espaço no nodo */ para i de nrochaves até índice + 1 faça /* deslocamento */ chave[i+1] chave[i]; dado [i+1] dado[i]; subárvore[i+1] subárvore[i]; chave[índice+1] ch; /* índice aponta para chave anterior */ dado[índice+1] d; /* por isso, nova chave fica em índice+1 */ subárvore[índice+1] NOVO ÁrvoreNáriaPesquisa(obtémN()); nrochaves nrochaves + 1; fim senão /* não existe espaço no nodo: vai p/ a subárvore DIR da chave anterior */ subárvore[índice].inclui(ch,d); 19

Inclusão em uma ANP Etapas do algoritmo: busca da chave: O(log 2 N log N n) ajuste vetor chave: O(N) Complexidade: O(log 2 N log N n + N) Exclusão em uma ANP Mesmo princípio da exclusão em uma ABP se a chave não possui subárvores ESQ e DIR vazias, ela é removida e ocorre deslocamento no vetor para ajustar as chaves e dados restantes se a chave possui subárvores ESQ e/ou DIR com chaves, ela é trocada com a maior chave da subárvore ESQ ou a menor chave da subárvore DIR (processo recursivo até que a chave não contenha subárvores!) 20

Exclusão em uma ANP Exemplo1: chave = 18 não há subárvores ESQ e DIR 3 9 18 22 37 63 71 88 ajuste do vetor (deslocamento de chaves) 26 90 Exclusão em uma ANP Exemplo1: chave = 18 não há subárvores ESQ e DIR 3 9 22 37 63 71 88 26 90 21

Exclusão em uma ANP Exemplo2: chave = 90 não há subárvores ESQ e DIR e a chave é a única do nodo 3 9 22 37 63 71 88 26 90 nodo torna-se vazio (subárvores ESQ e DIR de 90 tornam-se NULL!) Exclusão em uma ANP Exemplo2: chave = 90 não há subárvores ESQ e DIR e a chave é a única do nodo 3 9 22 37 63 71 88 26 22

Exclusão em uma ANP Exemplo3: chave = 54 existem subárvores ESQ e DIR: a chave é trocada com o maior chave na ESQ 3 9 22 37 63 71 88 26 Exclusão em uma ANP Exemplo3: chave = 54 a chave ainda possui subárvore ESQ não vazia: nova troca! 13 37 3 9 22 54 63 71 88 26 23

Exclusão em uma ANP Exemplo3: chave = 54 a chave agora pode ser removida! 13 37 3 9 22 26 63 71 88 54 Exclusão em uma ANP Exemplo3: chave = 54 chave removida! 13 37 3 9 22 26 63 71 88 24

Método exclui(ch object); índice, i inteiro; arvaux ÁrvoreNáriaPesquisa; Exclusão se nrochaves = 0 então /* chegou em um nodo vazio */ Exceção ChaveInexistente(); índice obtémíndice(ch); se índice 0 e ch = chave[índice] então /* achou a chave! */ se subárvore[índice-1].nrochaves > 0 então /* se existe ESQ */ aux subárvore[índice-1].maior(); trocavaloresmaior(this, índice, aux); subárvore[índice-1].exclui(ch); fim senão /* verifica se existe DIR */... Exclusão Método exclui(ch object);...senão se subárvore[índice].nrochaves > 0 então /* se existe DIR */ aux subárvore[índice].menor(); trocavaloresmenor(this, índice, aux); subárvore[índice].exclui(ch); fim senão /* chave não possui ESQ e DIR e pode ser removida */ nrochaves nrochaves 1; para i de índice até nrochaves faça chave[i] chave[i+1]; dado[i] dado[i+1]; subárvore[i] subárvore[i+1]; chave[i] NULL; dado[i] NULL; /* anula a posição mais a */ subárvore[i] NULL; /* direita do vetor */ se nrochaves = 0 então subárvore[0] NULL; fim senão subárvore[índice].exclui(ch); /* se não achou, vai p/ DIR do */ /* nodo imediatamente anterior */ 25

Problema com ANP Uma ANP também pode ficar desbalanceada! Exemplo: N = 4 seqüência de inserção: 20-60-90-12-7-18-5-4-6-1-3 20 60 90 7 12 18 4 5 6 1 3 Uma solução: usar árvores B! Árvore B Uma árvore B é uma ANP com as seguintes características: raiz com 2 <= grau <= N outros nodos têm N/2 <= grau <= N nodos vazios estão todos na mesma profundidade grau: número de subárvores não vazias 26

Exemplo N = 5 54 2 <= grau <= 4 3 6 62 77 89 99 3 <= grau <= 5 1 2 4 5 8 10 11 55 60 63 66 71 75 79 84 90 94 101 115 nodos vazios na mesma profundidade Propriedade (P5) O número mínimo de chaves em uma Árvore B A com N >= 2 é 2 N/2 h(a) - 1 N = 5 54 2. 5/2 0-1 = 1 3 6 62 99 2. 5/2 1-1 = 5 1 2 4 5 8 11 55 60 79 84 101 115 2. 5/2 2-1 = 17 27

Implementação Classe ÁrvoreB Subclasse de ÁrvoreNáriaPesquisa pai ÁrvoreB [ ]; construtor ÁrvoreB (N inteiro); se N < 2 então Exceção GrauInválido(); nrochaves 0; chave NOVO Object[N]; dado NOVO Object[N]; subárvore NOVO ÁrvoreNáriaPesquisa[N]; pai NULL; Inserção em uma Árvore B Princípio de funcionamento: inserção sempre em nodo folha se há espaço no nodo ela é ali inserida Caso o nodo exceder a sua capacidade: divisão do nodo (Split) a chave central (chave split) do nodo estourado é enviada ao nodo pai para ser lá inserida o processo se repete até que não ocorram mais divisões ou que seja criada uma nova raiz (árvore cresce para cima) 28

Exemplos de Inclusão N = 5 20 chave = 65 20 chave = 35 20 10 15 30 40 60 70 10 15 30 40 60 65 70 10 15 30 35 40 60 65 70 chave = 75 20 chave = 80 20 10 15 30 35 40 60 65 70 75 10 15 30 35 40 60 65 70 75 80 estourou! Exemplos de Inclusão N = 5 20 SPLIT(nodo) chavesplit = 70 20 insere chavesplit no nodo pai 70 10 15 30 35 40 60 65 70 75 80 estourou! 20 70 10 15 30 35 40 60 65 75 80 nodo E mantém-se nodo E nodo D como nodo filho! novos nodos têm grau = N/2 chave = 45 20 70 10 15 30 35 40 60 65 75 80 nodo E nodo D nodo D torna-se subárvore D da chavesplit! 10 15 30 35 40 45 60 65 75 80 29

Exemplos de Inclusão N = 5 20 70 chave = 25 20 70 SPLIT(nodo) chavesplit = 35 10 15 30 35 40 45 60 65 75 80 10 15 25 30 35 40 45 estourou! 60 65 75 80 20 70 35 10 15 25 30 40 45 60 65 75 80 Exemplos de Inclusão N = 5 20 70 chave = 25 20 70 SPLIT(nodo) chavesplit = 35 10 15 30 35 40 45 60 65 75 80 10 15 25 30 35 40 45 estourou! 60 65 75 80 20 70 10 15 35 25 30 40 45 60 65 75 80 20 35 70 10 15 25 30 40 45 60 65 75 80 30

N = 5 Exemplos de Inclusão 20 35 70 chaves = 1, 5 e 12 10 15 25 30 40 45 60 65 75 80 20 35 70 SPLIT(nodo) 1 5 12 15 estourou! 25 30 40 45 1 5 10 12 15 chavesplit = 10 10 20 35 70 60 65 75 80 25 30 40 45 estourou no nodo pai e ele é a raiz! 60 65 75 80 SPLIT(raiz) chavesplit = 35 cria uma nova raiz!! Exemplos de Inclusão 10 20 35 70 1 5 12 15 25 30 40 45 60 65 75 80 SPLIT(raiz) chavesplit = 35 árvore aumenta a sua altura! 35 raiz com grau mínimo = 2! 10 20 70 1 5 12 15 25 30 40 45 60 65 75 80 31

Exercícios 1. Dado N = 5, mostre como fica uma árvore B após cada uma das seguintes inserções de chaves: 20, 10, 40,, 30, 55, 3, 11, 4, 28, 36, 33, 52, 17, 25, 13, 45, 9, 43, 8, 48 2. Implementar na classe ANP: Método maior() retorna ANP; Método menor() retorna ANP; Método trocavaloresmaior(arv1 ANP, índice inteiro, arv2 ANP); Método totalchaves() retorna inteiro; Exclusão em uma Árvore B Princípio inicial de funcionamento: similar à exclusão na ANP pesquisa na árvore pela chave informada se a chave não possui subárvores ESQ e DIR então remove a chave e faz deslocamento das chaves no vetor senão, troca a chave pela maior chave na subárvore ESQ ou pela menor chave na subárvore DIR e recursivamente exclui a chave na subárvore para a qual ela foi enviada 32

Exclusão em uma Árvore B Após a remoção, é possível que o número de chaves em um nodo não raiz seja menor que o mínimo permitido ( N/2-1). Então: se existe nodo irmão à ESQ com nrochaves > N/2-1, faz rotaçãoe: N = 5 20 rotaçãoe 20 45 10 15 30 40 45 60 10 15 30 40 60 nodo 60 com capacidade inferior ao mínimo Exclusão em uma Árvore B senão, se existe nodo irmão à DIR com nrochaves > N/2-1, faz rotaçãod: N = 5 20 rotaçãod 20 55 10 15 30 55 60 70 10 15 nodo 30 com capacidade inferior ao mínimo 30 60 70 33

Exclusão em uma Árvore B senão (se não existe nodo irmão à ESQ nem à DIR com nrochaves > N/2-1), faz-se unificação (merge) de nodos: N = 5 10 30 80 merge 10 30 80...... 10 15 35 40 60 85 90 10 15 35 40 60 85 90 nodo 60 não possui irmãos com nrochaves > N/2-1 Exclusão em uma Árvore B A unificação (merge) pode se propagar para mais de um ancestral: N = 5 10 90... 20 40 60 70 merge... 20 40 10 90 70... 20 40 10 52 58 65 75 80 52 58 60 65 52 58 60 90 65 70 75 80 novo merge... 10 75 80 nodo 70 ficou com capacidade inferior ao mínimo! 20 40 90 52 58 60 65 70 75 80 34

Exclusão em uma Árvore B Quando a unificação (merge) se propaga até a raiz, a árvore reduz a sua altura: N = 5 merge 40 60 75 40 60 75 Exercício Considerando a árvore B gerada pelo exercício 1, mostre como ela fica após cada uma das seguintes exclusões de chaves: 20, 33, 4,, 30, 55, 11, 40, 28, 36, 10, 52, 17, 25, 13, 45, 9, 43, 8 35