Análise de Algoritmos
• Arquivos contém mais registros do que a memória primária pode armazenar
• Acesso ao disco
▫ Acessar um registro é algumas ordens de grandeza maior do que o custo de processamento na memória primária
• Medida de complexidade
▫ Acesso a disco
www.nakamura.eti.br/eduardo Análise de Algoritmos 2
• Memórias secundárias
▫ Apenas um registro pode ser acessado em um dado momento (acesso seqüencial)
• Memórias primárias
▫ Acesso a qualquer registro de um arquivo a um custo uniforme (acesso direto)
www.nakamura.eti.br/eduardo Análise de Algoritmos 3
• Proposta
▫ Busca em memória secundária
• Origem
▫ Proposto em 1972 por Bayer e McCreight,
▫ Laboratório de Pesquisas Científicas da Boeing
▫ “B” de Bayer ou “B” de Boeing?
• Em 1979, o uso de árvores-B já era praticamente o padrão adotado em SGBDs
www.nakamura.eti.br/eduardo Análise de Algoritmos 4
• Acesso a disco é caro (lento)
• Até agora usamos pesquisa binária nos índices ordenados
▫ Se o índice é grande e não cabe em memória principal?
▫ Pesquisa binária exige muitos acessos a disco
• 16 itens podem requerer 4 acessos, 1.024 itens podem requerer até 10 acessos
▫ São números altos
www.nakamura.eti.br/eduardo Análise de Algoritmos 5
• O custo de manter em disco um índice ordenado de forma a permitir busca binária é proibitivo
• Inserção e remoção de registros deve ter apenas efeitos locais
▫ Não exija a reorganização total do índice
www.nakamura.eti.br/eduardo Análise de Algoritmos 6
• Árvores balanceadas
▫ Os nós de uma árvore B podem ter um número variável de nós filho (árvores n-árias)
▫ Cada nó pode ter vários registros (chaves), recebendo o nome de página
• Em uma árvore B de grau t:
▫ Página raiz: 1 e 2t registros
▫ Demais páginas
Mínimo t registros e t + 1 descendentes
Máximo 2t registros e 2t + 1 descendentes
▫ Páginas folhas: todas no mesmo nível
www.nakamura.eti.br/eduardo Análise de Algoritmos 7
• Características
▫ Os registros aparecem em ordem crescente da esquerda para a direita
▫ Os nós folha tem os seus campos ponteiro com valores nulos
▫ Extensão natural da árvore binária de pesquisa
www.nakamura.eti.br/eduardo Análise de Algoritmos 8
• Árvore B de ordem t = 2 com três níveis
www.nakamura.eti.br/eduardo Análise de Algoritmos 9
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
10 20 40 50
30
• Considerando X como um nó interno da árvore e n o número de chaves armazenadas em X
▫ as n chaves k1, k2...kn são armazenadas em ordem crescente;
▫ e X possui n+1 ponteiros f1, f2...fn+1 para seus filhos
www.nakamura.eti.br/eduardo Análise de Algoritmos 10
f1 k1 f2 k2 f3 k3 ... fn kn fn+1
• Todo nó x tem os seguintes campos
▫ x.n – número de chaves no nó x
▫ As chaves em x estão em ordem crescente
x.chave[1] x.chave[2] ... x.chave[n]
▫ x.folha – booleano indicando se é folha
www.nakamura.eti.br/eduardo Análise de Algoritmos 11
f1 x.chave[1] f2 x.chave[2] ... fn x.chave[n] fn+1
• As chaves da subárvore apontada por f
iestão no intervalo entre x.chave[i-1] e x.chave[i]
www.nakamura.eti.br/eduardo Análise de Algoritmos 12
x.chave[i-1] fi x.chave[i] ...
... 2 6 ...
... 3 4 5 ...
• Toda folha tem a mesma profundidade
▫ Altura h da árvore
www.nakamura.eti.br/eduardo Análise de Algoritmos 13
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
10 20 40 50
30
• Limites (em função do grau t 2)
▫ Raiz: 1 e 2t chaves
▫ Demais nós
Mínimo t chaves e t+1 filhos
Máximo 2t chaves e 2t +1 filhos
• A árvore mais simples tem t = 2
▫ Cada nó pode ter 2, 3 ou 4 filhos
▫ Árvore 2-3-4
• Na prática t é muito maior
www.nakamura.eti.br/eduardo Análise de Algoritmos 14
• Altura h da árvore B
h logt ( (n+1)/2 )
www.nakamura.eti.br/eduardo Análise de Algoritmos 15
B-TREE-SEARCH(x,k) 1: i 1;
2: while i x.n and k > x.chave[i] do 3: i i + 1;
4: end while
5: if i x.n and k = x.chave[i] then
6: return (x,i); // nó e a posição dentro dele 7: end if
8: if x.folha = true then 9: return NIL;
10: else
11: DISK-READ(x.f[i]); // lê os filhos em f[i]
12: return B-TREE-SEARCH(x.f[i],k);
13: end if
www.nakamura.eti.br/eduardo Análise de Algoritmos 16
B-TREE-CREATE(T)
1: x ALOCATE-NODE();
2: x.folha true;
3: x.n 0;
4: DISK-WRITE(x);
5: T.raiz x;
www.nakamura.eti.br/eduardo Análise de Algoritmos 17
www.nakamura.eti.br/eduardo Análise de Algoritmos 18
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
10 20 40 50
30 17
www.nakamura.eti.br/eduardo Análise de Algoritmos 19
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
10 20 40 50
30 17
www.nakamura.eti.br/eduardo Análise de Algoritmos 20
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
10 20 40 50
30 17
www.nakamura.eti.br/eduardo Análise de Algoritmos 21
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
10 20 40 50
30
17
www.nakamura.eti.br/eduardo Análise de Algoritmos 22
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
10 20 40 50
30
17
www.nakamura.eti.br/eduardo Análise de Algoritmos 23
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
10 20 40 50
30
17
B-TREE-CREATE(T)
1: x ALOCATE-NODE();
2: x.folha true;
3: x.n 0;
4: DISK-WRITE(x);
5: T.raiz x;
www.nakamura.eti.br/eduardo Análise de Algoritmos 24
• A inserção nas árvores B são relativamente mais complicadas
▫ Precisamos inserir a nova chave no nó correto da árvore, sem violar suas propriedades
• Como proceder se o nó estiver cheio?
www.nakamura.eti.br/eduardo Análise de Algoritmos 25
• Como proceder se o nó estiver cheio?
▫ Separar (split) o nó ao redor do elemento mediano,
▫ Criar 2 novos nós que não violam as definições da árvore
▫ O elemento mediano é promovido, passando a fazer parte do nó pai
▫ A inserção é feita em um único percurso na árvore, a partir da raiz até uma das folhas
www.nakamura.eti.br/eduardo Análise de Algoritmos 26
• Localizar o nó folha X onde o novo elemento deve ser inserido
• Se o nó X estiver cheio, realizar uma subdivisão de nós
▫ Passar o elemento mediano de X para seu pai
▫ Dividir X em dois novos nós com t - 1 elementos
▫ Inserir a nova chave
• Se o pai de X também estiver cheio
▫ Repetir recursivamente a subdivisão para o pai de X
• Pior caso
▫ A altura da árvore B é aumentada para poder inserir o novo elemento
www.nakamura.eti.br/eduardo Análise de Algoritmos 27
www.nakamura.eti.br/eduardo Análise de Algoritmos 28
60?
www.nakamura.eti.br/eduardo Análise de Algoritmos 29
60
www.nakamura.eti.br/eduardo Análise de Algoritmos 30
60 40?
www.nakamura.eti.br/eduardo Análise de Algoritmos 31
40 60
www.nakamura.eti.br/eduardo Análise de Algoritmos 32
40 60 90, 70?
www.nakamura.eti.br/eduardo Análise de Algoritmos 33
40 60 70 90
www.nakamura.eti.br/eduardo Análise de Algoritmos 34
40 60 70 90 92?
www.nakamura.eti.br/eduardo Análise de Algoritmos 35
40, 60, 70, 90, 92
www.nakamura.eti.br/eduardo Análise de Algoritmos 36
40 60 90 92
70
www.nakamura.eti.br/eduardo Análise de Algoritmos 37
40 60 90 92
70 62,65?
www.nakamura.eti.br/eduardo Análise de Algoritmos 38
40 60 62 65 90 92
70
www.nakamura.eti.br/eduardo Análise de Algoritmos 39
40 60 62 65 90 92
70 45?
www.nakamura.eti.br/eduardo Análise de Algoritmos 40
40 45 90 92
60 70
62 65
www.nakamura.eti.br/eduardo Análise de Algoritmos 41
40 45 90 92
60 70 68,67?
62 65
www.nakamura.eti.br/eduardo Análise de Algoritmos 42
40 45 90 92
60 70
62 65 67 68
www.nakamura.eti.br/eduardo Análise de Algoritmos 43
40 45 90 92
60 70
62 65 67 68 69?
www.nakamura.eti.br/eduardo Análise de Algoritmos 44
40 45 90 92
60 67 70
62 65 68 69
www.nakamura.eti.br/eduardo Análise de Algoritmos 45
40 45 90 92
60 67 70
62 65 48,50?
68 69
www.nakamura.eti.br/eduardo Análise de Algoritmos 46
40 45 48 50 90 92
60 67 70
62 65 68 69
www.nakamura.eti.br/eduardo Análise de Algoritmos 47
40 45 48 50 90 92
60 67 70
62 65 68 69
55?
www.nakamura.eti.br/eduardo Análise de Algoritmos 48
50 55 90 92
48 60 67 70
62 65 68 69
40 45
www.nakamura.eti.br/eduardo Análise de Algoritmos 49
50 55 90 92
48 60 67 70
62 65 68 69
40 45
56,57?
www.nakamura.eti.br/eduardo Análise de Algoritmos 50
50 55 56 57 90 92
48 60 67 70
62 65 68 69
40 45
www.nakamura.eti.br/eduardo Análise de Algoritmos 51
50 55 56 57 90 92
48 60 67 70
62 65 68 69
40 45
58?
www.nakamura.eti.br/eduardo Análise de Algoritmos 52
48 60 67 70
90 92 62 65 68 69
40 45
58 56
57 58 50 55
www.nakamura.eti.br/eduardo Análise de Algoritmos 53
57 58 62 65 68 69 90 92
50 55 40 45
60
48 56 67 70
• A remoção de uma chave é análoga à inserção com alguns complicadores
▫ Uma chave pode ser removida de qualquer nó
▫ Precisamos garantir que ao removermos a chave as propriedades da árvore B não sejam violadas
www.nakamura.eti.br/eduardo Análise de Algoritmos 54
• Na inserção tivemos de garantir que um nó não se tornasse grande demais na inserção
▫ Na remoção devemos garantir que ele não torne-se pequeno demais
▫ Deve sempre ter pelo menos t elementos
• Existem 6 casos possíveis para a remoção de uma chave de uma árvore B
www.nakamura.eti.br/eduardo Análise de Algoritmos 55
• A chave k está numa folha da árvore e a folha possui pelo menos t+1 chaves
• Procedimento
▫ Remover a chave da árvore
www.nakamura.eti.br/eduardo Análise de Algoritmos 56
www.nakamura.eti.br/eduardo Análise de Algoritmos 57
5 10
11 12 13 6 7 8
1 2 3
www.nakamura.eti.br/eduardo Análise de Algoritmos 58
5 10
11 12 13 6 7 8
1 2
• A chave k está em um nó interno x
• Procedimento
▫ Caso 2a: O filho y que precede k no nó x possui pelo menos t+1 chaves
Encontre o predecessor k′ de k na sub-árvore com raiz em y
Remova k′ do nó filho e substitua k por k′ no nó atual
▫ Caso 2b: O filho z que sucede k no nó x possui pelo menos t+1 chaves
Encontre o sucessor k′ de k na sub-árvore com raiz em z
Remova k′ do nó filho e substitua k por k′ no nó atual
www.nakamura.eti.br/eduardo Análise de Algoritmos 59
www.nakamura.eti.br/eduardo Análise de Algoritmos 60
5 10
11 12 13 6 7 8
1 2 3
www.nakamura.eti.br/eduardo Análise de Algoritmos 61
5 8
11 12 13 6 7
1 2 3
www.nakamura.eti.br/eduardo Análise de Algoritmos 62
5 10
11 12 13 6 7
1 2 3
www.nakamura.eti.br/eduardo Análise de Algoritmos 63
5 11
12 13 6 7
1 2 3
• A chave k está em um nó interno x
• Procedimento
▫ Caso 2c: Ambos y (filho antes de k) e z (filho depois de k) possuem somente t chaves
Copiar todos os elementos de z em y
Liberar a memória ocupada por z
Remover o apontador em x
Remover recursivamente k de x
www.nakamura.eti.br/eduardo Análise de Algoritmos 64
www.nakamura.eti.br/eduardo Análise de Algoritmos 65
5 10
11 12 13 6 7
1 2
www.nakamura.eti.br/eduardo Análise de Algoritmos 66
5 10
11 12 13 1 2 6 7
www.nakamura.eti.br/eduardo Análise de Algoritmos 67
5 10
11 12 13 1 2 6 7
www.nakamura.eti.br/eduardo Análise de Algoritmos 68
10
11 12 13 1 2 6 7
www.nakamura.eti.br/eduardo Análise de Algoritmos 69
10
11 12 13 1 2 6 7
• A chave k não está em um nó interno x, determine a raiz c
i[x] da sub-árvore apropriada que contém k
▫ Se ci[x] tiver somente t chaves execute o procedimento abaixo
• Procedimento
▫ Caso 3a: Se ci[x] possui t chaves, mas tem um irmão adjascente com pelo menos t+1 chaves
Copie uma chave extra para ci[x]
Movendo uma chave de x para ci[x] e
Movendo uma chave de um dos irmãos adjascentes a ci[x]
de volta para x e ajustando os apontadores
www.nakamura.eti.br/eduardo Análise de Algoritmos 70
www.nakamura.eti.br/eduardo Análise de Algoritmos 71
5 10
11 12 13 6 7
1 2 3 4
www.nakamura.eti.br/eduardo Análise de Algoritmos 72
5 10
11 12 13 6
1 2 3 4
www.nakamura.eti.br/eduardo Análise de Algoritmos 73
10
11 12 13 6 5
1 2 3 4
www.nakamura.eti.br/eduardo Análise de Algoritmos 74
4 10
11 12 13 6 5
1 2 3
• A chave k não está em um nó interno x, determine a raiz c
i[x] da sub-árvore apropriada que contém k
▫ Se ci[x] tiver somente t chaves execute o procedimento abaixo
• Procedimento
▫ Caso 3b: Se ci[x] e ambos os irmãos (esquerdo e direito) possuem t chaves
Intercalar ci[x] com um único irmão (envolve mover uma
chave de x para baixo até o novo nó intercalado, afim de se tornar a chave mediana para esse nó
www.nakamura.eti.br/eduardo Análise de Algoritmos 75
www.nakamura.eti.br/eduardo Análise de Algoritmos 76
5 10
11 12 6 7
1 2
www.nakamura.eti.br/eduardo Análise de Algoritmos 77
5 10
11 12 6
1 2
www.nakamura.eti.br/eduardo Análise de Algoritmos 78
5 10
11 12 6
1 2
www.nakamura.eti.br/eduardo Análise de Algoritmos 79
5
11 12 6 10
1 2
www.nakamura.eti.br/eduardo Análise de Algoritmos 80
5
6 10 11 12 1 2
www.nakamura.eti.br/eduardo Análise de Algoritmos 81
5
6 10 11 12 1 2
• Verifique os algoritmos de inserção e remoção para
árvore B (capítulo 18 do livro texto
1). Faça uma análise de complexidade dos dois algoritmos
• Mostre os resultados da inserção das chaves F, S, Q, K, C, L, H, T, V, W, M, R, N, P, A, B, X, Y, D, Z, E.
Inicialmente a árvore estará vazia
• Para a árvore criada acima, mostre o resultado da remoção para A, W, M, B, C, D
www.nakamura.eti.br/eduardo Análise de Algoritmos 82
1Thomas H. Cormen, Charles E.Leiserson, Ronald L. Rivest & Clifford Stein. “Algoritmos: Teoria e Prática” (Tradução da 2ª edição americana).
• Applet animado
▫ http://slady.net/java/bt/view.php
www.nakamura.eti.br/eduardo Análise de Algoritmos 83