UNIVERSIDADE ESTADUAL DE MARINGÁ
DEPARTAMENTO DE INFORMÁTICA
Prof. Yandre Maldonado
Busca em Memória
Secundária
Prof. Yandre Maldonado e Gomes da Costa
[email protected]
1
Busca em Memória Secundária
Prof. Yandre Maldonado
• Busca de um item em uma massa de
dados que não cabe na memória principal;
• Procura-se reduzir ao máximo o número
de acessos à memória secundária;
Por que o tempo de acesso à memória
secundária é tão mais lento?
2
Busca em Memória Secundária
• Segundo (Drozdek, 2002), o tempo de acesso
em memória secundária é dado por:
Tacesso = Tlatência + Tprocura + Ttransferência
Prof. Yandre Maldonado
– Tlatência: tempo decorrido até que o disco gire para que
a cabeça de leitura se posicione sobre o bloco a ser
lido;
– Tprocura: deslocamento da cabeça de leitura até a trilha
a ser lida;
– Ttransferência: dado pela taxa de transferência
(capacidade do dispositivo);
3
1
Busca em Memória Secundária
• Um exemplo:
Prof. Yandre Maldonado
– Supondo um acesso à um dispositivo que gira a 3000
rpm em que se pretende transferir 5 kbytes;
– Neste caso: Tlatência = 10 ms (tempo de meia volta);
– Supondo que sejam gastos 40 ms para se localizar a
trilha a ser lida: Tprocura = 40 ms;
– Considerando um dispositivo com taxa de
transferência de 1000 kbytes/s: Ttransferência = 5 ms;
– Assim:
Tacesso = 10 ms + 40 ms + 5 ms = 55 ms
4
Busca em Memória Secundária
Prof. Yandre Maldonado
• O exemplo mostra um tempo de acesso
da ordem de ms;
• O tempo de execução de instruções pela
CPU é da ordem de microssegundos,
nanossegundos, ou mais rápido;
• Assim fica clara a necessidade de diminuir
acessos em memória secundária;
5
Busca em Memória Secundária
• Árvore B (Bayer e McCreight, 1972)
Prof. Yandre Maldonado
– Estrutura projetada para diminuir o número de
acessos em uma busca;
– Agrupa vários itens em um só nó, formando
um agrupamento conhecido como página;
página
6
2
Busca em Memória Secundária
Prof. Yandre Maldonado
• Observe que a ordem da árvore se altera:
neste exemplo ela se torna quaternária;
• Diminuição do número de buscas na
estrutura;
– Um exemplo (Ziviani, 2002):
• Busca em uma massa com 106 (1 milhão) de
registros;
– Em uma ABB: log2106 ≅ 20
– Na árvore descrita anteriormente: log4106 ≅ 10
– Se ampliássemos o número de registros por nó para
127, qualquer elemento poderia ser encontrado com, no
máximo, 3 buscas na estrutura;
7
Busca em Memória Secundária
• Número de registros por página:
Prof. Yandre Maldonado
– Segundo (Drozdek, 2002), na prática o
número de registros por página deve variar
entre 50 e 500;
– De acordo com (Cormen et al., 2002), este
número pode variar entre 50 e 2000;
– De fato, é interessante que este número seja
tal que corresponda aproximadamente ao
tamanho de um bloco do disco (aproveita-se
melhor o tempo de acesso);
8
Busca em Memória Secundária
• Exercícios:
Prof. Yandre Maldonado
– Calcule o tempo de acesso de 250 kbytes de dados
em um disco que gira a 7200 rpm e que possui taxa
de transferência de 2000 kbytes/s. Considere ainda
que a cabeça de leitura gasta 70 ms para se deslocar
de um extremo ao outro do disco e que, nesta
situação, a cabeça se encontra inicialmente em um
extremo do disco e a trilha a ser lida encontra-se à
uma distância que equivale a 2/3 da distância
máxima possível a ser percorrida;
– Qual é o número médio (aproximado) de buscas
realizadas para se encontrar um registro em uma
Árvore que possui 63 registros por página e que
armazena uma massa de 108 registros?
9
3
Busca em Memória Secundária
• Definição de Árvore B:
– Segundo (Ziviani, 2002), uma Árvore B de
ordem m* é tal que:
Prof. Yandre Maldonado
• Cada página possui, no mínimo m registros (e
m+1 descendentes) e no máximo 2m registros (e
2m+1 descendentes), exceto a página raiz, que
pode conter entre 1 e 2m registros;
• Todas as páginas folha aparecem no mesmo
nível.
10
* Diverge de outras definições.
Busca em Memória Secundária
• Relação entre as páginas e suas páginas
filhas:
chave1
Prof. Yandre Maldonado
pág1
pág2
chave2
...
chave2m
pág3
pág2m
pág2m+1
– Registros armazenados na página i são
menores do que a chave i e maiores do que a
chave i-1;
11
Busca em Memória Secundária
• Exemplo de Árvore B:
30
Prof. Yandre Maldonado
10
3
4
8
9
40
20
11
13
17
25
28
33
36
50
43
45
48
52
55
– Ordem m=2 com 3 níveis;
– Todas as páginas contêm 2, 3 ou 4 registros, exceto
a raiz;
12
4
Busca em Memória Secundária
• Particularidades de Árvore B:
Prof. Yandre Maldonado
– Depois de uma série de inserções e
remoções a árvore apresenta taxa de
ocupação de 69% (Drozdek, 2002);
– Crescimento das folhas para a raiz;
– Inserção de registros:
• Caso trivial: inserir o registro em uma página com
menos de 2m registros;
• Caso a página já tenha 2m registros, deve-se criar
uma nova página;
13
Busca em Memória Secundária
• Exemplos de inserção:
Prof. Yandre Maldonado
– Seqüência a inserir: 50, 20, 30, 37, 42, 47, 41
e 60;
– Árvore de ordem m=2;
a
50
b
20
50
c
20
30
50
d
20
30
37
50
14
Busca em Memória Secundária
– Criação de nova página:
• Transfere-se o elemento central da seqüência que
provocou o estouro para a página do nível superior
e cria-se duas páginas com os demais elementos;
Prof. Yandre Maldonado
– Note que, isto também pode provocar estouro na página
do nível superior;
– Ainda resta inserir: 42, 47, 41 e 60;
d
20
30
37
50
15
5
Busca em Memória Secundária
– Continuando a inserção:
• Próximo registro: chave 42;
d
20
30
37
50
Prof. Yandre Maldonado
– Seqüência ordenada das 2m+1 chaves: 20, 30, 37, 42,
50;
– A chave central (37) é transferida para o nível superior e
cria-se duas páginas com as demais;
e
20
37
30
42
50
16
Busca em Memória Secundária
– Continuando a inserção:
f
37
Prof. Yandre Maldonado
Inserindo 47
20
30
g
42
47
50
41
42
47
37
Inserindo 41
20
30
50
17
Busca em Memória Secundária
– Continuando a inserção:
h
Inserindo 60
Prof. Yandre Maldonado
20
30
37
47
41
42
50
60
– Exercício:
• A partir desta árvore descreva a inserção de uma
seqüência de registros com chaves 31, 32, 43, 44,
61 e 62.
18
6
Busca em Memória Secundária
– Árvore obtida:
i
Prof. Yandre Maldonado
20
30
31
32
37
47
41
42
43
44
50
60
61
62
– Exercício:
• Agora, faça a inserção dos registros com chaves
33 e 45.
19
Busca em Memória Secundária
– Árvore obtida:
Prof. Yandre Maldonado
20
32
30
j
31
37
33
41
42
43
47
44
50
45
60
61
62
– Exercício:
• Agora, faça a inserção dos registro com chave 63.
20
Busca em Memória Secundária
– Árvore obtida:
43
Prof. Yandre Maldonado
k
20
30
31
37
32
33
41
42
44
45
47
61
50
60
62
63
21
7
Busca em Memória Secundária
• Operação de remoção:
– Caso trivial 1:
• Quando o registro a ser removido estiver em uma
página folha com pelo menos m+1 registros;
Prof. Yandre Maldonado
– Quando o registro a ser removido não estiver
numa página folha:
• Substitui-se o registro por um que contenha uma
chave adjacente (antecessora ou sucessora);
– Caso trivial 2:
• Quando o substituo estiver originalmente em uma
página com, pelo menos, m+1 registros;
22
Busca em Memória Secundária
– Exemplo (caso trivial 1)
• Remover o registro com chave 38 da seguinte
árvore:
Prof. Yandre Maldonado
43
31
20
30
32
33
37
38
40
41
42
44
45
47
61
50
60
62
63
23
Busca em Memória Secundária
– Exemplo (caso trivial 2)
• Remover o registro com chave 43 da seguinte
árvore:
Prof. Yandre Maldonado
43
31
20
30
32
33
37
40
41
42
44
45
47
61
50
60
62
63
24
8
Busca em Memória Secundária
Prof. Yandre Maldonado
42
31
20
30
32
37
33
40
44
41
45
47
61
50
60
62
63
25
Busca em Memória Secundária
– E quando, após uma remoção, uma página
fica com menos de m registros?
Prof. Yandre Maldonado
• Neste caso uma propriedade da Árvore B é
violada;
• Com isto, é necessário tomar emprestado um
registro da página vizinha;
– Nesta situação, duas coisas podem ocorrer:
• O número de registros da página vizinha é maior
que m. Assim, basta tomar um registro
emprestado e trazê-lo para a página em questão
via página pai.
26
Busca em Memória Secundária
– Exemplo
• Remover o registro com chave 33 da seguinte
árvore:
Prof. Yandre Maldonado
43
31
20
30
32
33
37
40
41
42
44
45
47
61
50
60
62
63
27
9
Busca em Memória Secundária
Prof. Yandre Maldonado
43
31
20
30
32
40
37
41
44
42
45
47
61
50
60
62
63
28
Busca em Memória Secundária
Prof. Yandre Maldonado
• A segunda possibilidade é a de que a
página vizinha também tenha exatamente
m registros (neste caso as duas juntas têm
2m-1 registros);
• Nesta situação as duas páginas devem ser
“fundidas” em uma só;
29
Busca em Memória Secundária
• Exemplo: remoção do registro com chave 41 da
seguinte árvore:
31
Prof. Yandre Maldonado
20
30
32
40
37
41
42
37
40
31
20
30
32
42
30
10
Busca em Memória Secundária
Prof. Yandre Maldonado
– Observe que, dependendo do contexto, o
processo pode se propagar até a raiz;
– Exemplo: remover o registro com chave 41 da
seguinte árvore:
43
31
20
30
32
40
37
41
44
42
45
47
61
50
60
62
63
31
Busca em Memória Secundária
– Etapa 1:
43
Prof. Yandre Maldonado
31
20
30
32
37
40
44
42
45
47
61
50
60
62
63
32
Busca em Memória Secundária
– Etapa 2:
Prof. Yandre Maldonado
31
20
30
32
37
40
43
42
47
61
44
45
50
60
62
63
33
11
Busca em Memória Secundária
– Resultado:
Prof. Yandre Maldonado
31
20
30
32
37
40
43
47
61
44
42
45
50
60
62
63
34
Busca em Memória Secundária
• Eliminação de uma chave em Árvore B:
Prof. Yandre Maldonado
1. Se a chave não estiver numa folha, troque-a com seu sucessor
imediato.
2. Elimine a chave da folha.
3. Se a folha continuar com o número mínimo de chaves, fim.
4. A folha tem uma chave a menos que o mínimo. Verifique as páginas
irmãs da esquerda e direita:
4.1.se uma delas tiver mais que o número mínimo de chaves, aplique
redistribuição.
4.2.senão concatene a página com uma das irmãs e a chave pai.
5. Se ocorreu concatenação, aplique passos de 3 a 6 para a página
pai.
6. Se a última chave da raiz for removida, a altura da árvore diminui.
35
Busca em Memória Secundária
• Exercício:
– Dada a seguinte Árvore B, descreva o estado da
mesma após realizar a remoção dos registros com
seguintes seqüências de chave;
Prof. Yandre Maldonado
• 45, 30 e 28;
• 50, 8, 10, 4, 20, 40, 55, 17, 33, 11 e 36;
• 3, 9 e 52.
30
3
4
8
9
11
10
20
13
17
25
28
33
36
40
50
43
45
48
52
55
36
12
Busca em Memória Secundária
• Soluções possíveis:
10
Prof. Yandre Maldonado
3
4
8
9
11
13
17
25
40
50
20
33
36
43
48
52
55
13
3
25
9
13
25
43
43
48
52
48
37
Busca em Memória Secundária
• Uma forma de declarar a estrutura de uma
página de ordem 2:
Prof. Yandre Maldonado
const int m = 2;
typedef struct no_arvoreB arvoreB;
struct no_arvoreB {
int num_chaves;
int chaves[2*m];
arvoreB *filhos[2*m+1];
bool folha;
};
38
Busca em Memória Secundária
• Algoritmo de varredura em ordem:
Prof. Yandre Maldonado
void
void em_ordem(arvoreB
em_ordem(arvoreB *raiz)
*raiz)
{{
int
int i;i;
ifif (raiz
(raiz !=
!= NULL)
NULL)
{{
for
for (i(i == 0;
0; ii << raiz->num_chaves;
raiz->num_chaves; i++)
i++)
{{
em_ordem(raiz->filhos[i]);
em_ordem(raiz->filhos[i]);
printf("\n%d",
printf("\n%d", raiz->chaves[i]);
raiz->chaves[i]);
}}
em_ordem(raiz->filhos[i]);
em_ordem(raiz->filhos[i]);
}}
}}
39
13
Busca em Memória Secundária
• Algoritmo de Busca (busca na página):
Prof. Yandre Maldonado
int
int busca_binaria(arvoreB
busca_binaria(arvoreB *no,
*no, int
int info)
info)
{{
int
int meio,
meio, i,i, f;f;
ii == 0;
0;
ff == no->num_chaves-1;
no->num_chaves-1;
while
while (i(i <=
<= f)f)
{{
meio
meio == (i(i ++ f)/2;
f)/2;
ifif (no->chaves[meio]
(no->chaves[meio] ==
== info)
info)
return(meio);
return(meio); //Encontrou.
//Encontrou. Retorna
Retorna aa posíção
posíção em
em que
que aa chave
chave está.
está.
else
else ifif (no->chaves[meio]
(no->chaves[meio] >> info)
info)
ff == meio
meio -- 1;
1;
else
else ii == meio
meio ++ 1;
1;
}}
return(i);
return(i); //Não
//Não encontrou.
encontrou. Retorna
Retorna aa posição
posição do
do ponteiro
ponteiro para
para oo filho.
filho.
}}
40
Busca em Memória Secundária
• Algoritmo de Busca (busca na árvore):
Prof. Yandre Maldonado
bool
bool busca(arvoreB
busca(arvoreB *raiz,
*raiz, int
int info)
info)
{{
arvoreB
arvoreB *no;
*no;
int
int pos;
pos; //posição
//posição retornada
retornada pelo
pelo busca
busca binária.
binária.
no
no == raiz;
raiz;
while
while (no
(no !=
!= NULL)
NULL)
{{
pos
pos == busca_binaria(no,
busca_binaria(no, info);
info);
ifif (pos
(pos << no->num_chaves
no->num_chaves &&
&& no->chaves[pos]
no->chaves[pos] ==
== info)
info)
return(true);
return(true);
else
else no
no == no->filhos[pos];
no->filhos[pos];
}}
return(false);
return(false);
}}
41
Busca em Memória Secundária
• Trabalho prático:
Prof. Yandre Maldonado
– Implementar em linguagem C as operações de
inserção e remoção em uma Árvore B de ordem 2;
– O trabalho pode ser feito individualmente ou em
dupla;
– A data de entrega é 02/10/2006;
– O código fonte deverá ser apresentado pela dupla ao
professor;
– A nota será individual, pois dependerá inclusive do
desempenho durante a apresentação;
– Se forem identificados trabalhos copiados, todos os
envolvidos terão nota zero.
42
14
Busca em Memória Secundária
• Referências Bibliográficas:
Prof. Yandre Maldonado
– Cormen, Thomas H. et al. Algoritmos – teoria
e prática. Rio de Janeiro: Elsevier, 2002;
– Drozdek, Adam. Estrutura de Dados e
Algoritmos em C++. São Paulo: Pioneira
Thomsom Learning, 2002;
– Ziviani, Nivio. Projeto de Algoritmos – com
implementações em Pascal e C. São Paulo:
Pioneira Thomsom Learning, 2002;
43
15
Download

miniatura - ao Departamento de Informática