Escolar Documentos
Profissional Documentos
Cultura Documentos
Cap 6
Cap 6
Transparncias elaboradas por Wagner Meira Jr, Flvia Peligrinelli Ribeiro, Israel Guerra, Nvio Ziviani e Charles Ornelas
Almeida
Projeto de Algoritmos Cap.1 Introduo 1
Contedo do Captulo
6.1 Modelo de Computao para Memria Secundria
6.1.1 Memria Virtual
6.1.2 Implementao de um Sistema de Paginao
6.2 Acesso Sequencial Indexado
6.2.1 Discos pticos de Apenas-Leitura
6.3 rvores de Pesquisa
6.3.1 rvores B
6.3.2 rvores B
da Moldura de Pgina
contendo a pgina nmero p desde que esteja na memria
principal.
O mapeamento de endereos : f(e) = f(p, b) = p
+ b, onde e o
endereo do programa, p o nmero da pgina e b o nmero do byte.
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.1.1 7
Memria Virtual: Mapeamento de Endereos
p
p +b
Tabela_de_Pginas Pgina p
N
da
pgina
N
do
byte
Endereo
de
programa
p b
p = nil pgina no
presente na
memria
Incio
Pgina p
`
.
.
.
.
?
6
6
?
6
6
-
-
?
-
p
p
p
p
p
Pgina
p
p
p
Pgina
p
p
p
p
p
Pgina
p
Quadrados resulta-
dos de processos ou ar-
quivos.
Retngulos proces-
sos transformadores de
informao.
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.2 15
Acesso Seqencial Indexado
Utiliza o princpio da pesquisa seqencial cada registro lido
seqencialmente at encontrar uma chave maior ou igual a chave de
pesquisa.
Providncias necessrias para aumentar a ecincia:
o arquivo deve ser mantido ordenado pelo campo chave do registro,
um arquivo de ndices contendo pares de valores < x, p > deve ser
criado, onde x representa uma chave e p representa o endereo da
pgina na qual o primeiro registro contm a chave x.
Estrutura de um arquivo seqencial indexado para um conjunto de
15 registros:
3 14 25 41
1 2 3 4
3 5 7 11 1 14 17 20 21 2 25 29 32 36 3 41 44 48 4
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.2 16
Acesso Seqencial Indexado: Disco Magntico
Dividido em crculos concntricos (trilhas).
Cilindro todas as trilhas verticalmente alinhadas e que possuem o
mesmo dimetro.
Latncia rotacional tempo necessrio para que o incio do bloco
contendo o registro a ser lido passe pela cabea de leitura/gravao.
Tempo de busca (seek time) tempo necessrio para que o
mecanismo de acesso desloque de uma trilha para outra (maior parte
do custo para acessar dados).
Acesso seqencial indexado = acesso indexado + organizao
seqencial,
Aproveitando caractersticas do disco magntico e procurando
minimizar o nmero de deslocamentos do mecanismo de acesso
esquema de ndices de cilindros e de pginas.
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.2 17
Acesso Seqencial Indexado: Discos ticos de
Apenas-Leitura (CD-ROM)
Grande capacidade de armazenamento (600 MB) e baixo custo.
Informao armazenada esttica.
A ecincia na recuperao dos dados afetada pela localizao dos dados
no disco e pela seqncia com que so acessados.
Velocidade linear constante trilhas possuem capacidade varivel e tempo
de latncia rotacional varia de trilha para trilha.
A trilha tem forma de uma espiral contnua.
Tempo de busca: acesso a trilhas mais distantes demanda mais tempo que
no disco magntico. H necessidade de deslocamento do mecanismo de
acesso e mudanas na rotao do disco.
Varredura esttica: acessa conjunto de trilhas vizinhas sem deslocar
mecanismo de leitura.
Estrutura seqencial implementada mantendo-se um ndice de cilindros na
memria principal.
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 18
rvores B
rvores n-rias: mais de um registro por nodo.
Em uma rvore B de ordem m:
pgina raiz: 1 e 2m registros.
demais pginas: no mnimo m registros e m + 1 descendentes e no
mximo 2m registros e 2m + 1 descendentes.
pginas folhas: aparecem todas no mesmo nvel.
Registros em ordem crescente da esquerda para a direita.
Extenso natural da rvore binria de pesquisa.
rvore B de ordem m = 2 com trs nveis:
30
10 20
40 50
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 19
rvores B - TAD Dicionrio
Estrutura de Dados:
typedef long TipoChave;
typedef struct TipoRegistro {
TipoChave Chave;
/outros componentes/
} TipoRegistro;
typedef struct TipoPagina TipoApontador;
typedef struct TipoPagina {
short n;
TipoRegistro r [ MM] ;
TipoApontador p[ MM + 1] ;
} TipoPagina;
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 20
rvores B - TAD Dicionrio
Operaes:
Inicializa
void I ni ci al i za (TipoApontador Dicionario)
{ Dicionario = NULL; }
Pesquisa
Insere
Remove
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 21
rvores B - Pesquisa
void Pesquisa(TipoRegistro x, TipoApontador Ap)
{ long i = 1;
i f (Ap == NULL)
{ pr i nt f ( "TipoRegistro nao esta presente na arvore\n" ) ;
return;
}
while ( i < Ap>n && x>Chave > Ap>r [ i 1].Chave) i ++;
i f ( x>Chave == Ap>r [ i 1].Chave)
{ x = Ap>r [ i 1];
return;
}
i f ( x>Chave < Ap>r [ i 1].Chave)
Pesquisa(x, Ap>p[ i 1]);
else Pesquisa(x, Ap>p[ i ] ) ;
}
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 22
rvores B - Insero
1. Localizar a pgina apropriada aonde o regisro deve ser inserido.
2. Se o registro a ser inserido encontra uma pgina com menos de 2m
registros, o processo de insero ca limitado pgina.
3. Se o registro a ser inserido encontra uma pgina cheia, criada uma
nova pgina, no caso da pgina pai estar cheia o processo de diviso
se propaga.
Exemplo: Inserindo o registro com chave 14.
_
1 10
2 3 3 4 8 9 16 20 25 29
(a)
_
1 10 20
2 3 4 3 4 8 9 14 16 25 29
(b)
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 23
rvores B - Insero
Exemplo de insero das chaves: 20, 10, 40, 50, 30, 55, 3, 11, 4, 28, 36,
33, 52, 17, 25, 13, 45, 9, 43, 8 e 48
(a)
20
(b)
30
>
>
10 20 40 50
(c)
10 20 30 40
3 4 11 13 17 25 28 33 36 50 52 55
(d)
30
10 20
40 50
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 24
rvores B - Primeiro renamento do algoritmo Insere
void Ins(TipoRegistro Reg, TipoApontador Ap, short Cresceu,
TipoRegistro RegRetorno, TipoApontador ApRetorno)
{ long i = 1; long j ; TipoApontador ApTemp;
i f (Ap == NULL)
{ Cresceu = TRUE; Atri bui Reg a RegRetorno;
Atri bui NULL a ApRetorno; return;
}
while ( i < Ap > n && Reg.Chave > Ap > r [ i 1].Chave) i ++;
i f (Reg.Chave == Ap > r [ i 1].Chave) { pr i nt f ( " Erro: Registro j a esta presente\n" ) ; return; }
i f (Reg.Chave < Ap > r [ i 1].Chave) Ins(Reg, Ap > p[ i ], Cresceu, RegRetorno, ApRetorno) ;
i f ( ! Cresceu) return;
i f (Numero de registros em Ap < mm)
{ Insere na pagina Ap e Cresceu = FALSE; return; }
/ Overflow: Pagina tem que ser dividida /
Cria nova pagina ApTemp;
Transfere metade dos registros de Ap para ApTemp;
Atri bui registro do meio a RegRetorno;
Atri bui ApTemp a ApRetorno;
}
void Insere(TipoRegistro Reg, TipoApontador Ap)
{ Ins(Reg, Ap, &Cresceu, &RegRetorno, &ApRetorno) ;
i f (Cresceu) { Cria nova pagina rai z para RegRetorno e ApRetorno; }
}
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 25
rvores B - Procedimento InsereNaPgina
void InsereNaPagina(TipoApontador Ap,
TipoRegistro Reg, TipoApontador ApDir)
{ short NaoAchouPosicao;
int k;
k = Ap>n; NaoAchouPosicao = (k > 0);
while (NaoAchouPosicao)
{ i f (Reg.Chave >= Ap>r [ k1].Chave)
{ NaoAchouPosicao = FALSE;
break;
}
Ap>r [ k] = Ap>r [ k1];
Ap>p[ k+1] = Ap>p[ k] ;
k;
i f ( k < 1) NaoAchouPosicao = FALSE;
}
Ap>r [ k] = Reg;
Ap>p[ k+1] = ApDir;
Ap>n++;
}
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 26
rvores B - Renamento nal do algoritmo Insere
void Ins(TipoRegistro Reg, TipoApontador Ap, short Cresceu,
TipoRegistro RegRetorno, TipoApontador ApRetorno)
{ long i = 1; long j ;
TipoApontador ApTemp;
i f (Ap == NULL)
{ Cresceu = TRUE; ( RegRetorno) = Reg; ( ApRetorno) = NULL;
return;
}
while ( i < Ap>n && Reg.Chave > Ap>r [ i 1].Chave) i ++;
i f (Reg.Chave == Ap>r [ i 1].Chave)
{ pr i nt f ( " Erro: Registro j a esta presente\n" ) ; Cresceu = FALSE;
return;
}
i f (Reg.Chave < Ap>r [ i 1].Chave) i ;
Ins(Reg, Ap>p[ i ] , Cresceu, RegRetorno, ApRetorno) ;
i f ( ! Cresceu) return;
i f (Ap>n < MM) / Pagina tem espaco /
{ InsereNaPagina(Ap, RegRetorno, ApRetorno) ;
Cresceu = FALSE;
return;
}
/ Overflow: Pagina tem que ser dividida /
ApTemp = (TipoApontador)malloc(sizeof(TipoPagina) ) ;
ApTemp>n = 0; ApTemp>p[ 0] = NULL;
{ Continua na prxima transparncia }
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 27
rvores B - Renamento nal do algoritmo Insere
i f ( i < M + 1)
{ InsereNaPagina(ApTemp, Ap>r [ MM1], Ap>p[ MM] ) ;
Ap>n;
InsereNaPagina(Ap, RegRetorno, ApRetorno) ;
}
else InsereNaPagina(ApTemp, RegRetorno, ApRetorno) ;
for ( j = M + 2; j <= MM; j ++)
InsereNaPagina(ApTemp, Ap>r [ j 1], Ap>p[ j ] ) ;
Ap>n = M; ApTemp>p[ 0] = Ap>p[M+1];
RegRetorno = Ap>r [M] ; ApRetorno = ApTemp;
}
void Insere(TipoRegistro Reg, TipoApontador Ap)
{ short Cresceu;
TipoRegistro RegRetorno;
TipoPagina ApRetorno, ApTemp;
Ins(Reg, Ap, &Cresceu, &RegRetorno, &ApRetorno) ;
i f (Cresceu) / Arvore cresce na altura pela rai z /
{ ApTemp = (TipoPagina )malloc(sizeof(TipoPagina) ) ;
ApTemp>n = 1;
ApTemp>r [ 0] = RegRetorno;
ApTemp>p[ 1] = ApRetorno;
ApTemp>p[0] = Ap; Ap = ApTemp;
}
}
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 28
rvores B - Remoo
Pgina com o registro a ser retirado folha:
1. retira-se o registro,
2. se a pgina no possui pelo menos de m registros, a propriedade
da rvore B violada. Pega-se um registro emprestado da pgina
vizinha. Se no existir registros sucientes na pgina vizinha, as
duas pginas devem ser fundidas em uma s.
Pagina com o registro no folha:
1. o registro a ser retirado deve ser primeiramente substitudo por um
registro contendo uma chave adjacente.
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 29
rvores B - Remoo
Exemplo: Retirando a chave 3.
_
4
6 8
_
2
>
>
>
_
1
_
3
_
5
/
/
_
7
_
9
`
`
1 2
_
*
_
5
/
/
_
4
_
7
6 8
`
`
_
9
`
`
1 2
_
4
_
5
`
`
_
6
_
7
_
8
`
`
_
9
`
`
(a) Pgina vizinha possui mais do que m registros
_
1
_
2
_
3
`
`
_
4
_
5
_
6
`
`
_
7
`
`
1 2
_
*
_
4
_
5
_
6
`
`
_
7
`
`
_
4 6
1 2
_
5
_
7
`
`
(b) Pgina vizinha possui exatamente m registros
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 30
rvores B - Remoo
Remoo das chaves 45 30 28; 50 8 10 4 20 40 55 17 33 11 36; 3 9 52.
(d)
13 25 43 48
(c)
13
>
>
3 9 25 43 48 52
(b)
10 25 40 50
3 4 8 9 11 13 17 20 33 36 43 48 52 55
(a)
30
10 20
40 50
3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 31
rvores B - Procedimento Retira
void Reconstitui (TipoApontador ApPag, TipoApontador ApPai,
int PosPai , short Diminuiu)
{ TipoPagina Aux; long DispAux, j ;
i f (PosPai < ApPai>n) / Aux = TipoPagina a di rei t a de ApPag /
{ Aux = ApPai>p[PosPai+1]; DispAux = (Aux>n M + 1) / 2;
ApPag>r [ApPag>n] = ApPai>r [PosPai ] ;
ApPag>p[ApPag>n + 1] = Aux>p[ 0] ; ApPag>n++;
i f (DispAux > 0) / Existe folga : transfere de Aux para ApPag /
{ for ( j = 1; j < DispAux; j ++)
InsereNaPagina(ApPag, Aux>r [ j 1], Aux>p[ j ] ) ;
ApPai>r [PosPai ] = Aux>r [DispAux1]; Aux>n = DispAux;
for ( j = 0; j < Aux>n; j ++) Aux>r [ j ] = Aux>r [ j + DispAux] ;
for ( j = 0; j <= Aux>n; j ++) Aux>p[ j ] = Aux>p[ j + DispAux] ;
Diminuiu = FALSE;
}
else / Fusao: intercala Aux em ApPag e l i bera Aux /
{ for ( j = 1; j <= M; j ++) InsereNaPagina(ApPag, Aux>r [ j 1], Aux>p[ j ] ) ;
free(Aux) ;
for ( j = PosPai + 1; j < ApPai>n; j ++)
{ ApPai>r [ j 1] = ApPai>r [ j ] ; ApPai>p[ j ] = ApPai>p[ j +1] ; }
ApPai>n;
i f (ApPai>n >= M) Diminuiu = FALSE;
}
}
{ Continua na prxima transparncia }
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 32
rvores B - Procedimento Retira
else / Aux = TipoPagina a esquerda de ApPag /
{ Aux = ApPai>p[PosPai1]; DispAux = (Aux>n M + 1) / 2;
for ( j = ApPag>n; j >= 1; j )ApPag>r [ j ] = ApPag>r [ j 1];
ApPag>r [ 0] = ApPai>r [PosPai1];
for ( j = ApPag>n; j >= 0; j )ApPag>p[ j +1] = ApPag>p[ j ] ;
ApPag>n++;
i f (DispAux > 0) / Existe folga : transf . de Aux para ApPag /
{ for ( j = 1; j < DispAux; j ++)
InsereNaPagina(ApPag, Aux>r [Aux>n j ] ,
Aux>p[Aux>n j + 1] ) ;
ApPag>p[ 0] = Aux>p[Aux>n DispAux + 1] ;
ApPai>r [PosPai1] = Aux>r [Aux>n DispAux] ;
Aux>n = DispAux; Diminuiu = FALSE;
}
else / Fusao: intercala ApPag em Aux e l i bera ApPag /
{ for ( j = 1; j <= M; j ++)
InsereNaPagina(Aux, ApPag>r [ j 1], ApPag>p[ j ] ) ;
free(ApPag) ; ApPai>n;
i f (ApPai>n >= M) Diminuiu = FALSE;
}
}
{ Continua na prxima transparncia }
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 33
rvores B - Procedimento Retira
void Ret(TipoChave Ch, TipoApontador Ap, short Diminuiu)
{ long j , Ind = 1;
TipoApontador Pag;
i f (Ap == NULL)
{ pr i nt f ( "Erro: registro nao esta na arvore\n" ) ; Diminuiu = FALSE;
return;
}
Pag = Ap;
while ( Ind < Pag>n && Ch > Pag>r [ Ind1].Chave) Ind++;
i f (Ch == Pag>r [ Ind1].Chave)
{ i f (Pag>p[ Ind1] == NULL) / TipoPagina folha /
{ Pag>n; Diminuiu = (Pag>n < M) ;
for ( j = Ind; j <= Pag>n; j ++) { Pag>r [ j 1] = Pag>r [ j ] ; Pag>p[ j ] = Pag>p[ j +1] ; }
return;
}
/ TipoPagina nao e folha : trocar com antecessor /
Antecessor(Ap, Ind , Pag>p[ Ind1], Diminuiu) ;
i f (Diminuiu) Reconstitui (Pag>p[ Ind1], Ap, Ind 1, Diminuiu) ;
return;
}
i f (Ch > Pag>r [ Ind1].Chave) Ind++;
Ret(Ch, &Pag>p[ Ind1], Diminuiu) ;
i f (Diminuiu) Reconstitui (Pag>p[ Ind1], Ap, Ind 1, Diminuiu) ;
}
{ Continua na prxima transparncia }
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 34
rvores B - Procedimento Retira
void Antecessor(TipoApontador Ap, int Ind,
TipoApontador ApPai , short Diminuiu)
{ i f (ApPai>p[ApPai>n] ! = NULL)
{ Antecessor(Ap, Ind , ApPai>p[ApPai>n] , Diminuiu) ;
i f (Diminuiu)
Reconstitui (ApPai>p[ApPai>n] , ApPai , ( long)ApPai>n, Diminuiu) ;
return;
}
Ap>r [ Ind1] = ApPai>r [ApPai>n 1];
ApPai>n; Diminuiu = (ApPai>n < M) ;
}
{ Continua na prxima transparncia }
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 35
rvores B - Procedimento Retira
void Ret(TipoChave Ch, TipoApontador Ap, short Diminuiu)
{ long j , Ind = 1;
TipoApontador Pag;
i f (Ap == NULL)
{ pr i nt f ( "Erro: registro nao esta na arvore\n" ) ; Diminuiu = FALSE;
return;
}
Pag = Ap;
while ( Ind < Pag>n && Ch > Pag>r [ Ind1].Chave) Ind++;
i f (Ch == Pag>r [ Ind1].Chave)
{ i f (Pag>p[ Ind1] == NULL) / TipoPagina folha /
{ Pag>n;
Diminuiu = (Pag>n < M) ;
for ( j = Ind; j <= Pag>n; j ++)
{ Pag>r [ j 1] = Pag>r [ j ] ; Pag>p[ j ] = Pag>p[ j +1] ; }
return;
}
/ TipoPagina nao e folha : trocar com antecessor /
Antecessor(Ap, Ind , Pag>p[ Ind1], Diminuiu) ;
i f (Diminuiu)
Reconstitui (Pag>p[ Ind1], Ap, Ind 1, Diminuiu) ;
return;
}
{ Continua na prxima transparncia }
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.1 36
rvores B - Procedimento Retira
i f (Ch > Pag>r [ Ind1].Chave) Ind++;
Ret(Ch, &Pag>p[ Ind1], Diminuiu) ;
i f (Diminuiu) Reconstitui (Pag>p[ Ind1], Ap, Ind 1, Diminuiu) ;
}
void Retira(TipoChave Ch, TipoApontador Ap)
{ short Diminuiu;
TipoApontador Aux;
Ret(Ch, Ap, &Diminuiu) ;
i f ( Diminuiu && (Ap)>n == 0) / Arvore diminui na altura /
{ Aux = Ap; Ap = Aux>p[ 0] ;
free(Aux) ;
}
}
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.2 37
rvores B* - TAD Dicionrio
Estrutura de Dados:
typedef int TipoChave;
typedef struct TipoRegistro {
TipoChave Chave;
/ outros componentes /
} TipoRegistro;
typedef enum {
Interna , Externa
} TipoIntExt ;
typedef struct TipoPagina TipoApontador;
typedef struct TipoPagina {
TipoIntExt Pt ;
union {
struct {
int ni ;
TipoChave r i [ MM] ;
TipoApontador pi [ MM + 1] ;
} U0;
struct {
int ne;
TipoRegistro re[ MM2] ;
} U1;
} UU;
} TipoPagina;
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.2 38
rvores B* - Pesquisa
Semelhante pesquisa em rvore B,
A pesquisa sempre leva a uma pgina folha,
A pesquisa no pra se a chave procurada for encontrada em uma
pgina ndice. O apontador da direita seguido at que se encontre
uma pgina folha.
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.2 39
rvores B* - Procedimento para pesquisar na rvore B
N+1
2
nvel} =
4
7
,
Pr{Psmp esteja acima do 1
nvel} =
3
7
rvore B de ordem m:
Pr{Psmp esteja no 1
nvel} = 1
1
(2 ln2)m
+ O(m
2
),
Pr{Psmp esteja acima do 1
nvel} =
3
7
=
1
(2 ln 2)m
+ O(m
2
).
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.4 47
rvores B Randmicas - Acesso Concorrente
Novamente, em rvores B de ordem m = 70: 99% das vezes a Psmp
est em uma folha. (Permite alto grau de concorrncia para processos
modicadores.)
Solues muito complicadas para permitir concorrncia de operaes
em rvores B no trazem grandes benefcios.
Na maioria das vezes, o travamento ocorrer em pginas folha.
(Permite alto grau de concorrncia mesmo para os protocolos mais
simples.)
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.4 48
rvore B - Tcnica de Transbordamento (ou Overow)
Assuma que um registro tenha de ser inserido em uma pgina cheia,
com 2m registros.
Em vez de particion-la, olhamos primeiro para a pgina irm direita.
Se a pgina irm possui menos do que 2m registros, um simples
rearranjo de chaves torna a partio desnecessria.
Se a pgina direita tambm estiver cheia ou no existir, olhamos
para a pgina irm esquerda.
Se ambas estiverem cheias, ento a partio ter de ser realizada.
Efeito da modicao: produzir uma rvore com melhor utilizao de
memria e uma altura esperada menor.
Produz uma utilizao de memria de cerca de 83% para uma rvore
B randmica.
Projeto de Algoritmos Cap.6 Pesquisa em Memria Secundria Seo 6.3.4 49
rvore B - Inuncia do Sistema de Paginao
O nmero de nveis de uma rvore B muito pequeno (trs ou quatro)
se comparado com o nmero de molduras de pginas.
Assim, o sistema de paginao garante que a pgina raiz esteja
sempre na memria principal (se for adotada a poltica LRU).
O esquema LRU faz com que as pginas a serem particionadas em
uma insero estejam disponveis na memria principal.
A escolha do tamanho adequado da ordem m da rvore B
geralmente feita levando em conta as caractersticas de cada
computador.
O tamanho ideal da pgina da rvore corresponde ao tamanho da
pgina do sistema, e a transferncia de dados entre as memrias
secundria e principal realizada pelo sistema operacional.
Estes tamanhos variam entre 512 bytes e 4.096 bytes, em mltiplos de
512 bytes.