algorítmos e estrutura de dados iii
DESCRIPTION
Algorítmos e estrutura de dados III. Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação. Árvores 2-3 Árvores B (B-Trees) Árvores B+. Árvores de busca com grau maior que 2. - PowerPoint PPT PresentationTRANSCRIPT
Algorítmos e estrutura de dados III
Carlos Oberdan Rolim
Ciência da Computação
Sistemas de Informação
Árvores 2-3
Árvores B (B-Trees)
Árvores B+
Árvores de busca com grau maior que 2
Vimos que árvores de busca quando balanceadas, como as árvores AVL, permitem busca em tempo logarítmico.
No caso das árvores AVL, a busca se dá em tempo log2 (n) no pior caso.
Poderíamos tentar melhorar procurando fazer a busca em tempo logk (n), com k > 2.
Árvores 2-3
Similar às árvores AVL, mas - Cada nó interno tem dois ou três filhos e - Todos os nós externos têm a mesma profundidade.
A
C
F
K M
H L O
G
P
T
R X
Q S V Z
Inserção em árvores 2-3
Como nas árvores AVL, a inserção se dá numa folha. Se há espaço para acrescentar o novo elemento, ele entra aí.
Ex: Inserção do elemento G na árvore abaixo.
E
L P
I
T
V X
U W ZG
Inserção em árvores 2-3
Se não há espaço para acrescentar o novo elemento, gera-se dois nós com os dois elementos extremos no nó, e promove-se o elemento central, para ser incluído no nível imediatamente superior.
E
L P
I
T
V X
U W ZGN
Inserção em árvores 2-3
I N
T
V X
U W Z
Ex: Inserção do elemento N na árvore abaixo.
Como um nó não pode ter três elementos, são criados dois nós com um elemento cada, e o elemento do meio é promovido.
LE G P
Inserção em árvores 2-3
Se não há espaço para acrescentar o nó promovido, procede-se da mesma forma que no overflow anterior, até eventualmente achar espaço suficiente ou chegar até a raiz.
I N
T
V X
U W Z
Ex: Inserção do elemento C na árvore abaixo.
LE G PC
Inserção em árvores 2-3
Se não há espaço para acrescentar o nó promovido, procede-se da mesma forma que no overflow anterior, até eventualmente achar espaço suficiente ou chegar até a raiz.
N
T
V X
U W Z
Ex: Inserção do elemento C leva à promoção do elemento E.
LC P
E
G
I
Inserção em árvores 2-3
I T
V X
U W Z
Ex: Inserção do elemento C leva à promoção do elemento E que por sua vez leva à promoção do elemento I.
C
E
G
N
L P
Árvores B ou B-Tree
Note que a diferença crucial em termos de tempo de acesso entre a árvores binárias e as árvores 2-3 é que agora o acesso pode ser feito em tempo logarítmico, mas com base 3, o que é mais rápido.
Podemos pensar então numa forma de diminuir mais ainda o tempo de acesso, aumentando o número de elementos em cada nó.
Árvores B
Árvores B são uma extensão da noção de árvores 2-3, onde cada nó que não é a raiz pode ter entre m e 2m chaves.
Esta estrutura normalmente é usada em memória externa.
Deve haver um compromisso entre o maior número de elementos por nó e a capacidade de acesso em disco, além de uma técnica de busca dentro do nó.
Árvores B
É um tipo de árvore muito utilizada em banco de dados e sistema de arquivos.
Para inserir ou remover variáveis de um nó, o nó não poderá ultrapassar sua ordem e nem ser menor que sua ordem dividida por dois.
Árvores B não precisam ser rebalanceadas como são freqüentemente as árvores de busca binária com Árvore AVL.
Árvores B
Árvores B têm vantagens substanciais em relação a outros tipos de implementações quanto ao tempo de acesso e pesquisa aos nós.
O criador das árvores B, Rudolf Bayer, não definiu claramente de onde veio o B das árvores B.
Ao que parece, o B vem de balanceamento onde todos os nós da árvore estão em um mesmo nível.
Também é possível que o B tenha vindo de seu sobrenome Bayer, ou ainda do nome da empresa onde trabalhava Boeing, no Boeing Scientific Research Labs.
Árvores B
Definições
Quando existem 2 ou mais nós, passam a ser chamadas de n-árias
Nesses casos, os nós são mais comumente chamados de páginas
Os registros de uma árvore B também são todos ordenados
Árvores B
Supondo uma árvore B n-ária. Em um árvore B de ordem m temos:
Cada página contém:
Registros: no mínimo m e no máximo 2m registros , exceto a raiz, que pode conter entre 1 e 2m registros;
Descendentes: no mínimo m + 1 descendentes e no máximo 2m +1 descendentes
Todas as páginas folhas aparecem no mesmo nível
Exemplo de uma árvore B
30
3 4 8 9 11 13 17
10 20
25 28
40 50
33 36 43 45 48 52 55
Exemplo de uma árvore B de ordem 2 com 3 níveis
Páginas
Árvores B
Objetivo principal
Minimizar o número de acessos ao disco para recuperar um registro
25
10 20 30 40
2 5 7 8
13 14 15 18
22
24
26
27
28
32
35
38
41 42 45 46
Declaração do TAD Árvores B
Definição da Estrutura
#define ORDEM 2 #define TAMANHO (ORDEM*2)-1
typedef struct Pagina *PonteiroPagina; typedef struct { int chave; PonteiroPagina p; } item;
typedef struct { int m; // numero de itens na pagina PonteiroPagina p0; item e[TAMANHO]; } Pagina;
Declaração do TAD Árvores B
Definição das operações. Algumas das operações que podem ser feitas em árvores B são:
Inicializa
Pesquisa
Insere
Retira
Pesquisa em Árvore B
30
3 4 8 9 11 13 17
10 20
25 28
40 50
33 36 42 45 48 52 55
Procedimento para pesquisa do número 13
Pesquisa em Árvore B
30
3 4 8 9 11 13 17
10 20
25 28
40 50
33 36 42 45 48 52 55
Procedimento para pesquisa do número 55
Inserção
Primeiro, é preciso localizar a página apropriada em que o novo registro deve ser inserido
Duas possibilidades:
Caso 1: o registro encontra seu lugar em uma página com menos de 2m registros. Nesse caso, o processo de inserção fica limitado àquela página
Caso 2:O registro precisa ser inserido em uma página já cheia (com 2m registros). Nesse caso, o processo de inserção pode levar à criação de uma nova página.
Inserção de Registros
40
3 4 8 41 43
Caso 1: o registro encontra seu lugar em uma página com menos de 2m registros
Ordem 2
9
Registro 9
Registro 45
Registro 50
45 50
Inserção de Registros
40
3 4 8 9 41 43 45 50
Caso 2: O registro precisa ser inserido em uma página já cheia (com 2m registros), e a página pai tem menos que 2m registros e 2m+1 páginas
Ordem: 2
Registro 20
20
40
3 4 8 9 20 41 43 45 50
3 4 8 9 20
40
41 43 45 509 20
8 40
3 4 41 43 45 50
Caso 2: O registro precisa ser inserido em uma página já cheia (com 2m registros), e a página pai já tem 2m registros e 2m+1 páginas
Ordem: 2
Inserção de Registros
Registro 22
9 13 15 18
8 20 28 40
1 3 4 7 30 33 35 3721 23 25 26 41 43 45 50
9 13 15 18
8 20 28 40
1 3 4 7 30 33 35 3721 22 23 25 26 41 43 45 50
22
9 13 15 18
8 20 23 28 40
1 3 4 7 30 33 35 3721 22 41 43 45 5025 26
28 40
9 13 15 181 3 4 7 21 22 30 33 35 37 41 43 45 5025 26
8 20
23
Remoção
Primeiro, é preciso localizar a página apropriada do registro a ser excluído
Duas possibilidades:
Caso 1: quando o registro se encontra em uma página folha.
1.1: A folha possui mais que m registros
1.2: A folha possui apenas m registro e o irmão possui m+1 registros
1.3: A folha e seus irmãos possuem apenas m registros
Caso 2: quando o registro não se encontra em uma folha. Nesse caso, o registro a ser retirado deve ser primeiro substituído por um outro para depois ser excluído.
Em ambos os casos deve-se verificar se a retirada não afeta as propriedades básicas de uma árvore B
Remoção de RegistrosCaso 1.1: quando o registro se encontra em uma página folha e a folha possui mais que m registros
Ordem 2 Registros 7, 13, 15, 33, 37, 41 e 43
Retirada simples do elemento da folha
28 40
9 13 15 181 3 4 7 21 22 30 33 35 37 41 43 45 5025 26
8 20
23
Remoção de Registros
Caso 1.2: quando o registro se encontra em uma página folha, a folha possui m registros (mínimo possível) e o irmão possui m+1 registros
Ordem 2
A chave k do pai que separa os irmãos pode ser incluída no nó X e a última ou primeira chave do irmão (última se o irmão for da esquerda e primeira se o irmão for da direita) pode ser inserida no pai no lugar de k.
28 40
9 181 3 4 21 22 30 35 45 5025 26
8 20
23 Registro 9
28 40
8 181 3 21 22 30 35 45 5025 26
4 20
23
Remoção de Registros
Caso 1.2: quando o registro se encontra em uma página folha, a folha possui m registro (mínimo possível) e o irmão possui m+1 registros
Ordem 2
28 40
9 181 3 4 20 21 22 30 35 45 5025 26
8 19
23 Registro 18
28 40
8 191 3 4 21 22 30 35 45 5025 26
8 20
23
Remoção de Registros
Caso 1.3: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível). Se sub-dividem em dois casos:
• Caso 1.3.1: O pai pode emprestar registros
•Caso 1.3.2: O pai não pode emprestar registros
Remoção de RegistrosCaso 1.3.1: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível) e o pai pode emprestar
Ordem 2
Registro 6
Se os dois irmãos de X contiverem exatamente m registros (ocupação mínima), nenhum registro poderá ser emprestado. Neste caso, o nó X e um de seus irmãos (à esquerda ou direita) são concatenados em um único nó, que também contém a chave separadora do pai.
23
28 40
6 81 3 21 22 30 35 45 5025 26
4 10 20
13 18
1 3 4 8 45 5025 26
28 40
21 22 30 35
10 20
23
13 18
Remoção de RegistrosCaso 1.3.1: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível) e o pai pode emprestar
Ordem 2
Registro 8
23
28 40
6 81 3 21 22 30 35 45 5025 26
4 10 20
13 18
1 3 45 5025 26
28 40
21 22 30 35
4 20
23
6 10 13 18
Remoção de RegistrosCaso 1.3.1: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível) e o pai pode emprestar
Ordem 2
Registro 22
23
28 40
6 81 3 21 22 30 35 45 5025 26
4 10 20
13 18
13 18 20 211 3 45 5025 26
28 40
30 35
4 10
23
6 8
Remoção de RegistrosCaso 1.3.2: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível) e o pai não pode emprestar
Ordem 2
Registro 13
4 8 45 5025 26
28 40
21 22 30 35
10 20
23
13 18
Se os dois irmãos de X e o pai contiverem exatamente m registros (ocupação mínima), também nenhum registro poderá ser emprestado. Neste caso, o nó X e um de seus irmãos são concatenados em um único nó que também contém a chave separadora do pai, e o procedimento é feito recursivamente até que as páginas contenham a quantidade mínima de registros.
Remoção de Registros
4 8 45 5025 26
28 40
21 22 30 35
10 20
23
13 18
45 5025 26
28 40
21 22 30 35
20
23
4 8 10 18
21 22 30 35 45 5025 26
20 23 28 40
4 8 10 18
Remoção de RegistrosOutro exemplo: Árvore B de ordem 1
02
05
10
07
01 03 06 09
15
20
35
13 16 30 40
Registro 3
01 02
05
10
07
06 09
15
20
35
13 16 30 40
Remoção de Registros
01 02
05
10
07
06 09
15
20
35
13 16 30 40
01 02
05 07
10
06 09
15
20
35
13 16 30 40
01 02
05 07
10 20
06 09
15 35
13 16 30 40
Remoção
Caso 2: quando o registro não se encontra em uma folha.
Mesmo procedimento de remoção em árvores binárias ou AVL
Substituição pelo registro mais à direita da sub-árvore à esquerda;
Substituição pelo registro mais à esquerda da sub-árvore à direita;
Caso 2.1: a sub-árvore vizinha possui registros para emprestar
Caso 2.2: a sub-árvore vizinha não possui registros para emprestar
Remoção de Registros
Registro 20
Caso 2.1: a sub-árvore vizinha possui registros para emprestar
OU
4 8 10 18 21 22 23 30 35 45 5025 26
20 24 28 40
4 8 10 21 22 23 30 35 45 5025 26
18 24 28 40
4 8 10 18 22 23 30 35 45 5025 26
21 24 28 40
Remoção de Registros
Caso 2: quando o registro não se encontra em uma folha.
Possui dois casos:
Caso 2.2.1: O irmão possui registros para emprestar
Caso 2.2.2: O irmão não possui registros para emprestar
Remoção de Registros
Registro 20
Caso 2.2.1: a sub-árvore vizinha NÃO possui registros para emprestar e o irmão possui registros para emprestar
Concatena-se o filho à esquerda e à direita do registro excluído; o registro mais à esquerda (ou mais à direita) do irmão é promovido para a raiz e o registro à esquerda (ou à direita) da raiz é inserido na página que teve o registro excluído; o filho à esquerda (ou o filho à direita) do registro que foi emprestado passa a ser o filho à direita (ou à esquerda) do nó para onde ele foi deslocado;
23
28 37 40
6 181 3 21 22 30 35 45 5025 26
4 20
38 39
23
28 37 40
6 18 21 221 3 30 35 45 5025 26
4
38 39
Remoção de Registros
23
28 37 40
6 18 21 221 3 30 35 45 5025 26
4
38 39
28
37 40
6 18 21 221 3 30 35 45 5025 26
4 23
38 39
Remoção de Registros
Registro 40
Caso 2.2.1: a sub-árvore vizinha NÃO possui registros para emprestar e o irmão possui registros para emprestar
28
37 40
6 181 3 26 27 38 39 45 5030 32
4 20 25
22 23
28
37
6 181 3 26 27 38 39 45 5030 32
4 20 25
22 23
Remoção de Registros
28
37
6 181 3 26 27 38 39 45 5030 32
4 20 25
22 23
25
28 37
6 181 3 26 27 38 39 45 5030 32
4 20
22 23
Remoção de Registros
Registro 23
Caso 2.2.2: a sub-árvore vizinha NÃO possui registros para emprestar e o irmão também NÃO possui registros para emprestar
6 18
28
37 40
1 3 30 35 45 5025 26
4 23
6 18 25 26
28
37 40
1 3 30 35 45 50
4
Concatena-se os registros filhos à esquerda e à direita do registro excluído; em seguida, concatena-se os registros da página excluída, do seu irmão e do seu pai
6 18 25 26
4 28 37 40
1 3 30 35 45 50
Considerações finais
Inserção: Mais veloz se comparado à tabelas de hash, por sua capacidade de se ajustar e balancear a cada inserção, isto significa menores colisões, e consequentemente menos laços para encontrar uma posição livre.
No caso de precisar expandir, a duplicação é feita somente na folha, e nos nós correspondentes se necessário, o que garante menor espaço vazio alocado e menos ocupação em disco, ao contrário do hash que duplica a tabela por inteiro.
Considerações finais
Exclusão: No caso de uma exclusão, Arvores B são capazes de evitar grandes fragmentações, pois se ajustam e balanceiam também nesse momento.
Já em tabelas de hash, quando há exclusão de uma chave, o espaço alocado para esta fica vazio, porém ainda alocado. Maior fragmentação significa menor desempenho.
Considerações finais
Busca: Árvores B são tão boas e velozes quanto tabelas de hash numa busca por igualdade, porém são muito superiores em velocidade e desempenho em buscas do tipo range.
A superioridade da Árvore B, se baseia na chave primária, onde a busca começa pela raiz e é direcionada aos nós e filhos de acordo com a chave procurada, isto torna mais objetivo e direto o resultado final. Porém, se comparado a Árvore B+, sua performance pode cair um pouco em uma busca linear.
Árvores B+
São árvores B que contém dados somente nos nós folhas e existe uma ligação entre os irmãos folhas adjacentes para facilitar a busca
Uma árvore B+ é uma variação da árvore B.
Representa a ordenação de dados de uma maneira que permita uma inserção e remoção eficiente de elementos.
É um índice dinâmico de multi-níveis com ligações máximas e mínimas no número de chaves em cada nodo.
Árvores B+
Os sistemas de arquivos NTFS para o Microsoft Windows, o sistema de arquivos ReiserFS para Unix, o XFS para IRIX e Linux, e o JFS2 para AIX, OS/2 e Linux, usam este tipo de árvore.
Numa árvore-B+, contrastando com uma árvore-B, todos dos dados são gravados nas folhas.
Os nodos internos contêm apenas chaves e apontadores da árvore.
Todas as folhas estão no mesmo nível mais baixo.
Os nodos das folhas também estão ligados entre si como uma lista para efetuar consultas facilmente.
Arvores B+
O número máximo de apontadores num registro é chamado de ordem da árvore B+.
O número mínimo de chaves por registro é metade do número máximo de chaves. Por exemplo:
Se a ordem de uma árvore B+ for n+1, cada nodo (exceto o da raiz) deverá ter entre (n+1)/2 e n chaves.
Se n for um número primo, o número mínimo de chaves pode ser (n+1)/2 ou (n-1)/2, mas terá de ser o mesmo em toda a árvore.
Árvores B+
Um exemplo simples de uma árvore B+ ligando as chaves 1-7 aos valores de dados d1-d7.
Notar a lista ligada (em vermelho) permitindo uma atualização ordenada rápida.