ACH2024 Aula 16 Árvores B Parte 1 Prof Helton Hideraldo Bíscaro 1
Na aula passada... 2
Organização indexada Blocos de dados: em cada bloco os registros são ordenados pela chave Índice primário: blocos de índices ORDENADOS (pelo campo k) contendo registros de tamanho fixo com os campos <k,b>, sendo k a chave (primária) do primeiro registro (âncora) do bloco apontado por b Blocos do índice k b O índice é ordenado pelo campo k Blocos de dados Qual a vantagem? Índice tem bi blocos, sendo bi << B (B = nr de blocos de dados, no exemplo acima bi = 1 e B = 4), pois cada entrada é menor que um registro, e há só uma entrada por bloco de dado busca binária no índice é muito mais rápida!!! O(lg bi) 3
4
Organização indexada Problema: inserção / remoção Altera a posição em disco de vários registros altera âncora de vários blocos altera várias entradas do índice primário Formas de contornar o problema: Remoção por bits de validade Usar um arquivo desordenado de overflow (para as inserções, se necessário) Ou uma lista ligada de overflow (os registros do bloco e da lista podem ser ordenados para melhorar a busca) 5
Dá para melhorar ainda mais a busca? O que dá para fazer se o arquivo é muito grande e o próprio índice ficou grande (com muitos blocos)? ÍNDICE DO ÍNDICE!!! 6
Organização indexada multiníveis Nível 1: arquivo de índices para os dados Nível 2: arquivo de índices para o arquivo de índices nível 1 Se no nível 2 precisar de mais de um bloco, criar nível 3!. 7
8
Organização indexada multiníveis Nível 1: arquivo de índices para os dados Nível 2: arquivo de índices para o arquivo de índices nível 1 Se no nível 2 precisar de mais de um bloco, criar nível 3!. Busca: binária em cada nível (rápida!) - O(t) - precisa acessar t blocos, sendo t o número de níveis t = ceil(log fbi r 1 ), fbi = nr de registros que cabem em um bloco de índice (fator de blocagem) r 1 = nr total de registros de índice no nível 1 9
Organização indexada multiníveis Nível 1: arquivo de índices para os dados Nível 2: arquivo de índices para o arquivo de índices nível 1 Se no nível 2 precisar de mais de um bloco, criar nível 3!. Busca: 1 acesso em cada nível (rápida!) - O(t) - precisa acessar t blocos, sendo t o número de níveis t = ceil(log fbi r 1 ), fbi = nr de registros que cabem em um bloco de índice (fator de blocagem) r 1 = nr total de registros de índice no nível 1 10
Organização indexada multiníveis Inserção / remoção:? 11
Organização indexada multiníveis Inserção / remoção: cada vez mais complicado!!! Posso ter que alterar tudo! 12
Organização indexada multiníveis Inserção / remoção: cada vez mais complicado!!! Posso ter que alterar tudo! O que fazer??? Como ter uma busca eficiente mas permitir uma inserção e remoção razoável? AULA DE HOJE 13
Lembrando de AED 1... Busca eficiente sem gastar memória: 14
Lembrando de AED 1... Busca eficiente sem gastar memória: Busca binária (em um vetor) Mas o problema era justamente inserção / deleção Qual era a alternativa de continuar fazendo busca binária mas permitir dinamismo de inserção / remoção? 15
Lembrando de AED 1... Busca eficiente sem gastar memória: Busca binária (em um vetor) Mas o problema era justamente inserção / deleção Qual era a alternativa de continuar fazendo busca binária mas permitir dinamismo de inserção / remoção? Árvores Binárias de Busca!!!! 16
Lembrando de AED 1... Busca binária (em um vetor): -4, 2, 3, 5, 19, 21, 25 17
Lembrando de AED 1... Busca binária (em um vetor): -4, 2, 3, 5, 19, 21, 25 Árvores Binárias de Busca: 18
Lembrando de AED 1... Busca binária (em um vetor): -4, 2, 3, 5, 19, 21, 25 Árvores Binárias de Busca: 19
Lembrando de AED 1... Busca binária (em um vetor): -4, 2, 3, 5, 19, 21, 25 Árvores Binárias de Busca: IMPLEMENTAÇÃO? 20
Lembrando de AED 1... Busca binária (em um vetor): -4, 2, 3, 5, 19, 21, 25 Árvores Binárias de Busca: 21
Podemos pensar em algo semelhante para melhorar o dinamismo dos índices múltiníveis? 22
Podemos pensar em algo semelhante para melhorar o dinamismo dos índices múltiníveis? Árvores de busca n+1-árias! N = quantos registros são representados em um nó (bloco) da árvore, cada registro com uma chave ki N+1 ponteiros para nós filhos contendo registros com chaves em cada intervalo O segredo será mantê-las balanceadas! 23
ÁRVORES B!!! Registros organizados pela árvore, assim como na árvore binária de busca Logo, se os registros possuem uma chave única, não há repetição de valores Abaixo é representada só a chave para simplificar a figura, mas na verdade deve conter, para cada chave ki, o resto do registro (demais dados daquele item) ou um ponteiro pi para o registro (ki, pi) 24
Árvore B Clássica Vamos começar estudando a árvore B clássica, depois fica fácil adaptar para a árvore B+ 25
Árvore B Clássica Como deve ser a estrutura de dados para essa árvore? Considerando um nó x, descreva como estão dispostos os valores pela árvore Adiantando um pouquinho implemente a busca por uma chave c 26
27
raiz o nó x 28
Árvore B - Definição 29
Árvore B - Definição 30
Árvore B - Definição 31
EXERCÍCIO Reescreva as definições anteriores utilizando a seguinte implementação para nós: typedef int TipoChave; typedef struct no { TipoChave chave[max]; struct no* filho[max+1]; int numchaves; bool folha; } NO; 32
Tipo Nó de uma árvore B typedef int TipoChave; typedef struct no { TipoChave chave[max]; struct no* filho[max+1]; int numchaves; bool folha; } NO; 33
VAMOS PAUSAR A DEFINIÇÃO E PENSAR Como inserir o valor 1 nessa árvore? 34
VAMOS PAUSAR A DEFINIÇÃO E PENSAR Como inserir o valor 1 nessa árvore? E depois 9, 6,... 35
VAMOS PAUSAR A DEFINIÇÃO E PENSAR Como inserir o valor 1 nessa árvore? E depois 9, 6,... A forma que eu defino a inserção, mesmo mantendo as propriedades vistas até agora, não deveriam aumentar a altura da árvore em demasiado 36 Para isso outras propriedades devem ser definidas e mantidas...
Árvore B - Definição 37
Árvore B - Definição Isso quer dizer que eu posso inserir o valor 1 como um filho esquerdo de 2? 38
Árvore B - Definição Isso quer dizer que eu posso inserir o valor 1 como um filho esquerdo de 2? NÃO! 39
Árvore B - Definição chaves 40
Estrutura de uma árvore B #define t 2 typedef int TipoChave; typedef struct no { TipoChave chaves[2*t-1]; struct no* filhos[2*t]; int numchaves; bool folha; } NO; 41
Árvore B - Observação 42
Árvore B altura máxima 43
Operações Básicas em Árvores B 44
Operações Básicas em Árvores B 45
46
raiz o nó x 47
Referências Livro do Cormen: cap 18 (3 a ed.) Livro do Drozdek (4 a ed) cap 7 48