Escolar Documentos
Profissional Documentos
Cultura Documentos
Projetos de Algoritmos em C e Pascal - Nivio Ziviani
Projetos de Algoritmos em C e Pascal - Nivio Ziviani
C(n)
0.10
0.25
0.50
0.75
0.90
0.95
1.06
1.17
1.50
2.50
5.50
10.50
Tabela 4.1: Nmero de comparaes em uma pesquisa com sucesso para hashing linear
0 aspecto negativo do mtodo, seja listas encadeadas ou open addresstng,
est relacionado com o pior caso, que O(N). Se a funo de transformao
no conseguir espalhar os registros de forma razovel pelas entradas da ta-
bela, ento uma longa lista linear pode ser formada, deteriorando o tempo
mdio de pesquisa. 0 melhor caso, assim como o caso mdio, 0(1).
142 CAPTULO 42. PES QUIS A EM MEMRIA PRIM RIA
4.43. TRANS FORMA O DE CHAV E (HASHING) 143
Como vantagens na utilizao do mtodo de transformao da chave
citamos: (i) alta eficincia no custo de pesquisa, que 0(1) para o caso mdio
e, (ii) simplicidade de implementao. Como aspectos negativos citamos: (i)
o custo para recuperar os registros na ordem lexicogrfica das chaves alto,
sendo necessrio ordenar o arquivo e, (ii) o pior caso O(N).
Notas Bibliogrficas
As principais referncias para pesquisa em memria interna so Gonnet e
Baeza-Yates (1991), Knuth (1973), e Mehlhorn (1984). Outros livros in-
cluem Standish (1980), Wirth (1976), Wirth (1986), Aho, Hoperoft e Ullman (
1983), Terada (1991). Um estudo mais avanado sobre estruturas de dados e
algoritmos pode ser encontrado em Tarjan (1983).
Um dos primeiros estudos sobre insero e retirada em rvores de pes-
quisa foi realizado por Hibbard (1962), tendo provado que o comprimento
mdio do caminho interno aps n inseres randnicas 21n n. A definio
de rvore binria foi extrada de Knuth (1968, p.315).
A primeira rvore binria de pesquisa com balanceamento foi proposta
por Adel'son-Vel'skii e Landis (1962), dois matemticos russos, a qual rece-
beu o nome de rvore AVL. Uma rvore binria de pesquisa uma rvore
AVL se a altura da subrvore esquerda de cada nodo nunca difere de l da
altura da subrvore direita. A Figura 4.16 apresenta uma rvore com esta
propriedade.
Fi gura 4. 16: Arvore AVL
A forma de manter a propriedade AVL atravs de transformaes loca-
lizadas no caminho de pesquisa. Como a altura das rvores AVL fica sempre
entre log
2
(n + 1) e 1.4404 log
2
(n + 2) 0.328 (Adel'son-Vel'skii e Landis,
1962), o custo para inserir ou retirar O(log n), que exatamente o custo
144 CAPTULO 4. PESQUISA EM MEMRIA PRIM RIA
para percorrer o caminho de pesquisa. Wirth (1976, 1986) apresenta imple-
mentaes dos algoritmos de insero e de retirada para as rvores AVL.
O material utilizado na Seo 4.3.2 veio de Bayer (1971), Bayer (1972),
Olivi (1980), Ziviani e Tompa (1982) e Ziviani, Olivi e Gonnet (1985). Os
trabalhos de Bayer apresentam as rvores SBB, o de Olivi sugere uma
melhoria para o algoritmo de insero e o de Ziviani e Tompa apresentam im-
plementaes para os algoritmos de insero e retirada. A rvore SBB pode
ser vista como uma representao binria da rvore 2-3-4, apresentada por
Guibas e Sedgewick (1978). Este mesmo trabalho mostra como adaptar
vrios algoritmos clssicos para rvores de pesquisa balanceadas dentro do
esquema rvores red-black.
Sleator e Tarjan (1983) apresentam vrios mtodos para manuteno de
rvores auto-ajustveis. A idia mover os nodos mais freqentemente
acessados em direo raiz aps cada acesso: embora cada operao isolada
possa ter custo mais alto, ao longo de um perodo maior o tempo mdio de
cada operao menor, isto , o custo amortizado diminui ao longo do
tempo. Em outras palavras, uma operao particular pode ser lenta, mas
qualquer seqncia de operaes rpida.
Exerccios
1) Considere as tcnicas de pesquisa seqencial, pesquisa binria e a pes-
quisa baseada em hashing.
a) Descreva as vantagens e desvantagens de cada uma das tcnicas
acima, colocando em que situaes voc usaria cada uma delas.
b) D a ordem do pior caso e do caso esperado de tempo de execuo
para cada mtodo.
c) Qual a eficincia de utilizao de memria (relao entre o
espao necessrio para dados e o espao total necessrio) para
cada mtodo?
EXERCCIOS 145
c) Voc conhece algum algoritmo que seja timo para resolver o pro-
blema?
3) Qual a principal propriedade de uma rvore binria de pesquisa?
4) rvore Binria de Pesquisa
a) Desenhe a rvore binria de pesquisa que resulta da insero su-
cessiva das chaves Q U E S T A O F C I L numa rvore inicial-
mente vazia.
b) Desenhe as rvores resultantes das retiradas dos elementos E e
depois U da rvore obtida no item anterior.
5) Arvores Binrias
Suponha que voc tenha uma rvore binria na qual esto armazenadas
uma chave em cada nodo. Suponha tambm que a rvore foi construda
de tal maneira que, ao caminhar nela na ordem central, as chaves so
visitadas em ordem crescente.
a) Qual propriedade entre as chaves deve ser satisfeita para que isso
seja possvel?
b) Dada uma chave k, descreva sucintamente um algoritmo que pro-
cure por k em uma rvore com essa estrutura.
c) Qual a complexidade do seu algoritmo no melhor caso e no pior
caso? Justifique.
6) rvore SBB
a) Desenhe a rvore SBB que resulta da insero sucessiva das chaves
Q U E S T A O F C I L numa rvore inicialmente vazia.
b) Desenhe as rvores resultantes das retiradas dos elementos E e
depois U da rvore obtida no item anterior.
7) rvore SBB
Um novo conjunto de transformaes para a rvore SBB foi proposto
por Olivi (1980). 0 algoritmo de insero usando as novas trans-
formaes produz rvores SBB com menor altura e demanda um n-
mero menor de transformaes de diviso de nodos para construir a
rvore, conforme comprovado em Ziviani e Tompa (1982) e Ziviani,
Olivi e Gonnet (1985). A Figura 4.17 mostra as novas transformaes. 0
operao divide esquerda-esquerda requer modificao de trs apon-
tadores, a operao divide esquerda-direita requer a alterao de cinco
146 CAPTULO 4. PESQUISA EM MEMRIA PRIM RIA
apontadores, e a operao aumenta altura requer apenas a modificao
de dois bits. Transformaes simtricas tambm podem ocorrer.
Quando ocorre uma transformao do tipo aumenta altura, a altura da
subrvore transformada um mais do que a altura da subrvore origi-
nal, o que pode provocar outras transformaes ao longo do caminho
de pesquisa at a raiz da rvore. Usualmente, o retorno ao longo do
caminho de pesquisa termina quando um apontador vertical encon-
trado ou uma transformao do tipo divide realizada. Como a altura
da subrvore que sofreu a diviso a mesma que a altura da subrvore
original, apenas uma transformao do tipo divide suficiente para
restaurar a propriedade SBB da rvore.
EXERCCIOS 147
Bayer (1972), Olivi (1980) e tambm Wirth (1976) usaram dois bits
por nodo em suas implementaes para indicarem se os apontadores
direita e esquerda so horizontais ou verticais. Entretanto, apenas um
bit necessrio: a informao indicando se o apontador direita (
esquerda) horizontal ou vertical pode ser armazenada no filho
direita (esquerda). Alm do fato de demandar menos espao em cada
nodo, o retorno ao longo do caminho de pesquisa para procurar por dois
apontadores horizontais pode ser terminado mais edo, porque a
informao sobre o tipo de apontador que leva a um nodo disponvel
sem a necessidade de retornar at seu pai.
Implemente as novas transformaes mostradas na Figura 4.17. Utilize
apenas 1 bit por nodo para manter a informao sobre a inclinao dos
apontadores.
8) Quais as caractersticas de uma boa funo hash?
9) Um dos mtodos utilizados para se organizar dados atravs de tabelas
hash.
a) Em que situaes a tabela hash deve ser utilizada?
b) Descreva dois mecanismos diferentes para resolver o problema de
colises de vrias chaves em uma mesma posio da tabela.
Quais so as vantagens e desvantagens de cada mecanismo?
10) Em uma tabela hash cam 100 entradas, as colises so resolvidas
usando listas encadeadas. Para reduzir o tempo de pesquisa, decidiu-se
que cada lista seria organizada como uma rvore binria de pesquisa. A
funo utilizada h(k ) = k mod 100. Infelizmente, as chaves inseridas
seguem o padro k
i
= 50i, onde k
i
corresponde i-sima chave inserida.
a) Mostre a situao da tabela aps a insero de k
i
, com i = 1, 2, . ,
13. (Faa desenho.)
b) Depois que 1000 chaves so inseridas de acordo com o padro
acima, inicia-se a insero de chaves escolhidas de forma rand-
mica (isto , no seguem o padro das chaves j inseridas). Assim
responda:
i) Qual a ordem do pior caso (isto , o maior nmero de com-
paraes) para inserir uma chave?
ii) Qual o nmero esperado de comparaes para inserir uma
chave? (Assuma que cada uma das 100 entradas da tabela
igualmente provvel de ser endereada pela funo h.)
148 CAPITULO 4. PESQUISA EM MEMRIA PRIM RIA
11) Hashing
Substitua XXXXXXXXXXXX pelas 12 primeiras letras do seu nome,
desprezando brancos e letras repetidas, nas duas partes desta questo.
Para quem no tiver doze letras diferentes no nome, completar com as
letras PQRSTUVWXYZ, nesta ordem, at completar 12 letras. Por
exemplo, eu deveria escolher
N I V O Z A P Q R S T U
A segunda letra I de NIVIO no entra porque ela j apareceu antes, e
assim por diante (Arabe, 1992).
a) Desenhe o contedo da tabela hash resultante da insero de re-
gistros com as chaves XXXXXXXXXXXX, nesta ordem, numa
tabela inicialmente vazia de tamanho 7 (sete), usando listas enca-
deadas. Use a funo hash h(k ) = k mod 7 para a k-sima letra do
alfabeto.
b) Desenhe o contedo da tabela hash resultante da insero de re-
gistros com as chaves XXXXXXXXXXXX, nesta ordem, numa
tabela inicialmente vazia de tamanho 13 (treze), usando open ad-
dressing e hashing linear para resolver as colises. Use a funo
hash h(k ) = k mod 13 para a k-sima letra do alfabeto.
12) Hashing Open addressing
a) Hashing Linear. Desenhe o contedo da tabela hash resultante da
insero de registros com as chaves Q U E S T A O F C I L, nesta
ordem, numa tabela inicialmente vazia de tamanho 13 (treze)
usando open addressing com hashing linear para a escolha de
localizaes alternativas. Use a funo hash h(k ) = k mod 13
para a k-sima letra do alfabeto.
b) Hash Duplo. Desenhe o contedo da tabela hash resultante da
insero de registros com as chaves Q U E S T A O F C I L, nesta
ordem, numa tabela inicialmente vazia de tamanho 13 (treze)
usando open addressing com hash duplo. Use a funo hash h
1
(k )
= k mod 13 para calcular o endereo primrio e j = 1 + (k mod
11) para resolver as colises, ou seja, para a escolha de
localizaes alternativas. Logo h
i
(k) = (h
i
_
1
(k) + j) mod 13, para
2 i M (Sedgewick, 1988).
13) Considere as seguintes estruturas de dados:
a) heap
EX ER C CI OS 149
b) rvore binria de pesquisa
c) vetor ordenado
d) tabela hash com soluo para colises usando "open addressing"
e) tabela hash com soluo para colises usando "listas encadeadas".
Para cada um dos problemas abaixo, sugira a estrutura de dados mais
apropriada dentre as listadas acima, de forma a minimizar tempo es-
perado e espao necessrio. Indique o tempo e o espao necessrio em
cada escolha e por que superior aos outros.
i) inserir/retirar/encontrar um elemento dado;
ii) inserir/retirar/encontrar o elemento de valor mais prximo ao so-
licitado;
iii) coletar um conjunto de registros, processar o maior elemento,
coletar mais registros, processar o maior elemento, e assim por
diante.
iv) mesma situao descrita no item anterior adicionada da operao
extra de ajuntar ("merge") duas estruturas.
14) 0 objetivo deste trabalho o de projetar e implementar um sistema de
programas, incluindo as estruturas de dados e os algoritmos. Neste
trabalho, o aluno ter a oportunidade de exercitar parcialmente o con-
ceito de independncia de implementao, atravs da utilizao de
duas estruturas de dados distintas para implementar o mesmo pro-
blema. Neste caso, o mdulo que implementa cada uma das estruturas
de dados dever permitir o intercmbio entre uma estrutura e outra,
causando o menor impacto possvel em outras partes do programa.
Problema: Criao de ndice remissivo
Vrias aplicaes necessitam de um relatrio de referncias cruzadas.
Por exemplo, a maioria dos livros apresentam um ndice remissivo que
corresponde a uma lista alfabtica de palavras chave ou palavras rele-
vantes do texto com a indicao dos locais no texto onde cada palavra
chave ocorre.
Como exemplo, suponha um arquivo contendo um texto constitudo
como abaixo:
Linha 1: Good programming is not learned from
Linha 2: generalities, but by seeing how significant
Linha 3: programs can be made clean, easy to Linha
4: read, easy to maintain and modify,
150 CAPTULO 4. PESQUISA EM MEMRIA PRIM RIA
Linha 5: human-engineered, efficient, and reliable,
Linha 6: by the application of common sense and
Linha 7: by the use of good programming practices.
Assumindo que o ndice remissivo seja constitudo das palavras chave:
programming, programs, easy, by, human-engineered, and, be, to, o
programa para criao do ndice deve produzir a seguinte sada:
and 4 5 6
be 3
by 2 6 7
easy 3 4
human-engineered 5
programming 1 7
programs 3
to 3 4
Note que a lista de palavras chave est em ordem alfabtica. Adjacente
a cada palavra est uma lista de nmeros de linhas, um para cada vez
que a palavra ocorre no texto.
Projete um sistema para produzir um ndice remissivo. O sistema
dever ler um nmero arbitrrio de palavras chave que devero cons-
tituir o ndice remissivo, seguido da leitura de um texto de tamanho
arbitrrio, o qual dever ser esquadrinhado procura de palavras que
pertenam ao ndice remissivo.
Cabe ressaltar que:
a) Uma palavra considerada como uma seqncia de letras e dgi-
tos, comeando com uma letra;
b) Apenas os primeiros c
l
caracteres devem ser retidos nas chaves.
Assim, duas palavras que no diferem nos primeiros c
l
caracteres
so consideradas idnticas;
c) Palavras constitudas por menos do que c
1
caracteres devem ser
preenchidas por um nmero apropriado de brancos.
Utilize um mtodo eficiente para verificar se uma palavra lida do texto
pertence ao ndice. Para resolver este problema, voc deve utilizar
duas estruturas de dados distintas:
EXERCCIOS 151
a) Implementar o ndice como uma rvore de pesquisa;
b) Implementar o ndice como uma tabela hash, usando o mtodo
hashing linear para resolver colises.
Observe que, apesar do hashing ser mais eficiente do que rvores de
pesquisa, existe uma desvantagem na sua utilizao: aps atualizado
todo o ndice remissivo, necessrio imprimir suas palavras em ordem
alfabtica. Isto imediato em rvores de pesquisa, mas, quando se usa
hashing, isto problemtico, sendo necessrio ordenar a tabela hash
que contm o ndice remissivo.
Utilize o exemplo acima para testar seu programa. Comece a pensar to
logo seja possvel, enquanto o problema est fresco na memria e o
prazo para termin-lo est to longe quanto jamais poder estar.
15) Considere duas listas ordenadas de nmeros. Determine para cada
elemento da lista menor se ele est presente tambm na lista maior.
(Pode assumir que no existem duplicaes em nenhuma das duas lis-
tas.) Considere os seguintes casos:
uma lista contm apenas 1 elemento, a outra n
as duas listas contm n elementos
a) Sugira algoritmos eficientes para resolver o problema
b) Apresente o nmero de comparaes necessrio
c) Mostre que cada algoritmo minimiza o nmero de comparaes.
16) rvore Patricia Desenhe a rvore Patricia que resulta da insero
sucessiva das chaves
Q U E S T A O F C I L
numa rvore inicialmente vazia.
17) rvore Patricia
a) Desenhe a rvore Patricia que resulta da insero sucessiva das
chaves
M U L T I C S
numa rvore inicialmente vazia.
b) Qual o custo para pesquisar em uma rvore Patricia construda
atravs de n inseres randmicas? Explique.
152 CAPTULO 4. PESQUISA EM MEMRIA PRIM RIA
c) Qual o custo para construir uma rvore Patricia atravs de n
inseres randmicas? Explique.
i) Sob o ponto de vista prtico, quando n muito grande (diga-
mos 100 milhes), qual a maior dificuldade para construir
a rvore Patricia?
ii) Como a dificuldade apontada no item anterior pode ser su-
perada?
18) rvore Patricia (Murta, 1992)
Considere o seguinte trecho do poema "Quadrilha" de Carlos Drum-
mond de Andrade:
"Joo amava Teresa que amava Raimundo que amava
Maria que amava Joaquim que amava Lill que no
amava ningum."
Construa uma rvore Patricia para indexar o texto acima. Considere
a seguinte codificao para as palavras do texto:
Joo 01001011 Maria 01100101
amava 00011101 Joaquim 00101110
Teresa 11101011 Lili 01010011
que 10100101 no 10011100
Raimundo 11011010 ningum 10110010
a) Faa uma pesquisa pelas chaves "amava", "que amava" e "Lill".
Mostre o caminho percorrido para cada pesquisa e as ocorrncias
do termo pesquisado.
b) Aponte a maior sequncia de palavras que se repete no banco de
dados e mostre como localizar, em qualquer rvore Patricia, este
tipo de ocorrncia.
19) rvore Patricia
Construa, passo a passo, a rvore Patricia para as seis primeiras cha-
ves semi-infinitas do texto abaixo, representado como uma seqncia
de bits:
0 1 1 0 0 1 1 0 1 1 0 0 1 Texto
1 2 3 4 5 6 7 8 9 Posio
EXERCCIOS 153
20) rvore Patricia
Projete e implemente um sistema de programas para recuperao efi-
ciente de informao em bancos de dados constitudos de textos. Tais
bancos de dados geralmente recebem adies peridicas, mas nenhuma
atualizao do que j existe realizada. Alm disso, o tipo de con-
sulta aos dados totalmente imprevisvel. Estes conjuntos de dados
aparecem em sistemas legislativos, judicirios, bibliotecas, jornalismo,
automao de escritrio, dentre outros.
Neste trabalho voc deve utilizar um mtodo que cria um ndice cuja
estrutura uma rvore Patricia, construda a partir de uma sequncia
de chaves semi-infinitas.
O sistema de programas dever ser capaz de:
a) construir a rvore Patricia sobre um texto de tamanho arbitrrio,
representado como um conjunto de palavras;
b) ler um conjunto de palavras de tamanho arbitrrio;
c) encontrar todas as ocorrncias do conjunto de palavras no texto,
imprimindo junto com o conjunto algumas palavras anteriores e
posteriores no texto;
d) informar o nmero de ocorrncias do conjunto de palavras no
texto;
e) encontrar o maior conjunto de palavras que se repete pelo menos
uma vez no texto e informar o seu tamanho;
f) dado um inteiro encontrar, se houver, todas as ocorrncias de
conjuntos de palavras no texto cujo tamanho seja igual ao inteiro
dado.
21) Pat Array
Projete e implemente um sistema de programas para recuperao efi-
ciente de informao em bancos de dados constitudos de textos. Tais
bancos de dados geralmente recebem adies peridicas, mas nenhuma
atualizao do que j existe realizada. Alm disso, o tipo de con-
sulta aos dados totalmente imprevisvel. Estes conjuntos de dados
aparecem em sistemas legislativos, judicirios, bibliotecas, jornalismo,
automao de escritrio, dentre outros.
Neste trabalho voc deve utilizar uma estrutura de dados chamada
PAT array, (Gonnet e Baeza-Yates, 1991) construda a partir de uma
seqncia de chaves semi-infinitas. 0 PAT array uma representao
compacta da rvore Patricia (Seo 4.4), por armazenar
154 CAPTULO 4. PESQUISA EM MEMRIA PRIMRIA
apenas os nodos externos da rvore. 0 arranjo constitudo de aponta-
dores para o incio de cada palavra de um arquivo de texto. Logo, ne-
cessrio apenas um apontador para cada ponto de indexao no texto.
Este arranjo dever estar indiretamente ordenado pela ordem lexi-
cogrfica das chaves semi-infinitas, conforme mostrado na Figura 4.18.
A construo de um Pat array equivalente a ordenao de registros
de tamanhos variveis, representados pelas chaves semi-infinitas. Qual-
quer operao sobre a rvore Patricia poder ser simulada sobre o Pat
array a um custo adicional de O(log n). Mais ainda, para a operao
de pesquisa de prefixo a rvore Patricia no precisa de fato ser simu-
lada, sendo possvel obter algoritmos de custo O(log n) ao invs de O(
log
2
n) para esta operao. Esta operao pode ser implementada
atravs de uma pesquisa binria indireta sobre o arranjo, com o resul-
tado de cada comparao sendo menor que, igual ou menor que. Pat
arrays so tambm chamados Suffix arrays (Manber e Myers, 1990).
O sistema de programas dever ser capaz de:
a) Construir o PAT array sobre um texto de tamanho arbitrrio,
representado como um conjunto de palavras;
b) Ler um conjunto de caracteres de tamanho arbitrrio. Este con-
junto poder ser uma palavra ou um prefixo de palavra;
c) Informar o nmero de ocorrncias do conjunto de caracteres no
texto;
d) Encontrar todas as ocorrncias do conjunto de caracteres no texto,
imprimindo junto com o conjunto algumas palavras anteriores e
posteriores no texto;
e) Apresente a complexidade de pior caso para a letra c);
f) Mostre a relao entre o PAT array e a rvore Patricia.
Captulo 5
Pesquisa em Memria
Secundria
A pesquisa em memria secundria envolve arquivos contendo um nmero
de registros que maior do que o nmero que a memria interna pode
armazenar. Os algoritmos e as estruturas de dados para processamento em
memria secundria tm que levar em considerao os seguintes aspectos:
1. O custo para acessar um registro algumas ordens de grandeza maior
do que o custo de processamento na memria primria. Logo, a medida
de complexidade principal est relacionada com o custo para transferir
dados entre a memria principal e a memria secundria. A nfase deve
ser na minimizao do nmero de vezes que cada registro transferido
entre a memria interna e a memria externa. Por exemplo, o tempo
necessrio para a localizao e a leitura de um nmero inteiro em disco
magntico pode ser suficiente para obter a mdia aritmtica de algumas
poucas centenas de nmeros inteiros ou mesmo orden-los na memria
principal.
2. Em memrias secundrias apenas um registro pode ser acessado em um
dado momento, ao contrrio das memrias primrias que permitem o
acesso a qualquer registro de um arquivo a um custo uniforme. Os
registros armazenados em fita magntica somente podem ser acessados
de forma seqencial. Os registros armazenados em disco magntico ou
disco tico podem ser acessados diretamente, mas a um custo maior do
que o custo para acess-los seqencialmente. Os sistemas operacionais
levam esse aspecto em considerao e dividem o arquivo em blocos,
onde cada bloco constitudo de vrios registros. A operao bsica
sobre arquivos trazer um bloco da memria secundria para uma
rea de armazenamento na memria principal. Assim, a leitura de
155
156 CAPTULO 6. PESQUISA EM MEMRIA SECUND RIA
um nico registro implica na transferncia de todos os registros de um
bloco para a memria principal.
A escrita de registros em um arquivo segue caminho contrrio. Na me-
dida em que registros so escritos no arquivo eles vo sendo colocados
em posies contguas de memria na rea de armazenamento. Quando
a rea de armazenamento no possui espao suficiente para armazenar
mais um registro o bloco copiado para a memria secundria, dei-
xando a rea de armazenamento vazia e pronta para receber novos
registros.
A tcnica de utilizao de reas de armazenamento evita que um pro-
cesso que esteja realizando mltiplas transferncias de dados de forma
seqencial tenha que ficar esperando que as transferncias se realizem
para prosseguir o processamento. As transferncias so realizadas em
blocos pelo sistema operacional diretamente para uma rea de arma-
zenamento. 0 processo usurio pega o dado nesta rea e somente
obrigado a esperar quando a rea se esvazia. Quando isto ocorre, o sis-
tema operacional enche novamente a rea e o processo continua. Esta
tcnica pode ser aprimorada com o uso de duas ou mais reas de ar-
mazenamento. Neste caso, enquanto um processo est operando em
uma rea o sistema operacional enche a outra.
3. Para desenvolver um mtodo eficiente de pesquisa o aspecto sistema
de computao da maior importncia. As caractersticas da arquite-
tura e do sistema operacional da mquina tornam os mtodos de pes-
quisa dependentes de parmetros que afetam seus desempenhos. As-
sim, a transferncia de blocos entre as memrias primria e secundria
deve ser to eficiente quanto as caractersticas dos equipamentos dis-
ponveis o permitam. Tipicamente, a transferncia se torna mais efici-
ente quando o tamanho dos blocos de 512 bytes ou mltiplos deste
valor, at 4096 bytes.
Na prxima seo apresentamos um modelo de computao para memria
secundria que transforma o endereo usado pelo programador no endereo
fsico alocado para o dado a ser acessado. Este mecanismo utilizado pela
maioria dos sistemas atuais para controlar o trnsito de dados entre o disco e a
memria principal. A seguir, apresentamos o mtodo de acesso seqencial
indexado e mostramos sua utilizao para manipular grandes arquivos em
discos ticos de apenas leitura. Finalmente, apresentamos um mtodo efici-
ente para manipular grandes arquivos em discos magnticos que a rvore
n-ria de pesquisa.
5.1. MODELO DE COMPUTAO PARA MEM. SECUND RIA 157
5.1 Modelo de Computao para Memria Se-
cundria
Esta seo apresenta um modelo de computao para memria secundria
conhecido como memria virtual. Este modelo normalmente implemen-
tado como uma funo do sistema operacional. Uma exceo o sistema
operacional DOS para microcomputadores do tipo IBM-PC, que, apesar de
muito vendido no mundo inteiro, no oferece um sistema de memria vir-
tual. Por essa razo, vamos apresentar o conceito e mostrar uma das formas
possveis de se implementar um sistema de memria virtual. Alm disso, o
conhecimento de seu funcionamento facilita a implementao eficiente dos
algoritmos para pesquisa em memria secundria tambm em ambientes que
j ofeream esta facilidade. Maiores detalhes sobre este tpico podem ser
obtidos em livros da rea de sistemas operacionais, tais como Lister (1975),
Peterson e Silberschatz (1983) e Tanenbaum (1987).
Me m r i a Vi r t ua l
A necessidade de grandes quantidades de memria e o alto custo da memria
principal tm levado ao modelo de sistemas de armazenamento em dois
nveis. O compromisso entre velocidade e custo encontrado atravs do uso
de uma pequena quantidade de memria principal (at 640 kbytes em
microcomputadores do tipo IBM-PC usando sistema operacional DOS) e de
uma memria secundria muito maior (vrios milhes de bytes).
Como apenas a informao que est na memria principal pode ser aces-
sada diretamente, a organizao do fluxo de informao entre as memrias
primria e secundria extremamente importante. A organizao desse
fluxo pode ser realizada utilizando-se um mecanismo simples e elegante para
transformar o endereo usado pelo programador na correspondente loca-
lizao fsica de memria. 0 ponto crucial a distino entre espao de en-
dereamento endereos usados pelo programador e espao de memria
localizaes de memria no computador. O espao de endereamento N e
o espao de memria M pode ser visto como um mapeamento de endereos
do tipo
f : N M.
O mapeamento de endereos permite ao programador usar um espao de
endereamento que pode ser maior que o espao de memria primria dis-
ponvel. Em outras palavras, o programador enxerga uma memria virtual
cujas caractersticas diferem das caractersticas da memria primria.
Existem vrias formas de implementar sistemas de memria virtual. Um
dos meios mais utilizados o sistema de paginao no qual o espao de
endereamento dividido em pginas de igual tamanho, em geral mltiplos
158 CAPTULO 5. PESQUISA EM MEMRIA SECUND RIA
de 512 bytes, e a memria principal dividida de forma semelhante em
Molduras_de_Pginas de igual tamanho. As Molduras de_Pginas contm
algumas pginas ativas enquanto o restante das pginas esto residentes em
memria secundria (pginas inativas). O mecanismo de paginao possui
duas funes, a saber:
a) realizar o mapeamento de endereos, isto , determinar qual pgina um
programa est endereando, e encontrar a moldura, se existir, que
contenha a pgina;
b) transferir pginas da memria secundria para a memria primria
quando necessrio, e transferi-las de volta para a memria secundria
quando no esto mais sendo utilizadas.
Para determinar a qual pgina um programa est se referindo, uma parte
dos bits que compe o endereo interpretada como um nmero de pgina
e a outra parte como o nmero do byte dentro da pgina. Por exemplo, se
o espao de endereamento possui 24 bits ento a memria virtual de
2
24
bytes; se o tamanho da pgina de 512 bytes (2
9
) ento 9 bits so utilizados
para representar o nmero do byte dentro da pgina e os restantes 15 bits so
utilizados para representar o nmero da pgina.
O mapeamento de endereos a partir do espao de endereamento (nme
ro da pgina mais nmero do byte) para o espao de memria (localizao
fsica da memria) realizado atravs de uma Tabela_de_Pginas, cuja p-
sima entrada contm a localizao p/ da Moldura_de_Pgina contendo a
pgina nmero p, desde que esteja na memria principal (a possibilidade de
que p no esteja na memria principal ser tratada logo frente). Logo, o
mapeamento de endereos
f (e)=f (p,b)=p/+b
onde o endereo de programa e (nmero da pgina p e nmero do byte b)
pode ser visto na Figura 5.1.
A Tabela_de_Pginas pode ser um arranjo do tamanho do nmero de
pginas possveis. Quando acontecer do programa enderear um nmero de
pgina que no esteja na memria principal, a entrada correspondente na
Tabela_de_Pginas estar vazia (p/ = nil) e a pgina correspondente ter que
ser trazida da memria secundria para a memria primria, atualizando a
Tabela_de_Pginas.
Se no existir uma Moldura_de_Pgina vazia no momento de trazer uma
nova pgina do disco ento alguma outra pgina tem que ser removida da
memria principal para abrir espao para a nova pgina. O ideal remover a
pgina que no ser referenciada pelo perodo de tempo mais longo no
futuro. Entretanto, no h meios de se prever o futuro. O que normalmente
MODELO DE COMPUTAO PARA MEM. SECUND RIA 159
Fi gur a 5.1: Mapeamento de endereos para paginao
feito tentar inferir o futuro a partir do comportamento passado. Existem
vrios algoritmos propostos na literatura para a escolha da pgina a ser
removida. Os mais comuns so:
Menos Recentemente Utilizada (LRU). Um dos algoritmos mais utili-
zados o LRU (Least Recently Used), o qual remove a pgina menos
recentemente utilizada, partindo do princpio que o comportamento
futuro deve seguir o passado recente. Neste caso, temos que registrar a
seqncia de acesso a todas as pginas.
Uma forma possvel de implementar a poltica LRU para sistemas pagi-
nados atravs do uso de uma fila de Molduras_de_Pginas, conforme
ilustrado na Figura 5.2. Toda vez que uma pgina utilizada (para
leitura apenas, para leitura e escrita ou para escrita apenas), ela
removida para o fim da fila (o que implica na alterao de cinco apon-
tadores). A pgina que est na moldura do incio da fila a pgina
LRU. Quando uma nova pgina tem que ser trazida da memria se-
cundria ela deve ser colocada na moldura que contm a pgina LRU.
Menos Freqentemente Utilizada (LFU). 0 algoritmo LFU (Least Fre-
quent ly Used) remove a pgina menos freqentemente utilizada. A
justificativa semelhante ao caso anterior, e o custo o de registrar o
nmero de acessos a todas as pginas. Um inconveniente que uma
pgina recentemente trazida da memria secundria tem um baixo
nmero de acessos registrados e, por isso, pode ser removida.
160 CAP TULO 5. PESQUISA EM MEMRIA SECUNDARIA
Figura 5.2: Fila de Molduras_de_Pginas
Ordem de Chegada (FIFO). 0 algoritmo FIFO (First In First Out)
remove a pgina que est residente h mais tempo. Este algoritmo o
mais simples e o mais barato de se manter. A desvantagem que ele
ignora o fato de que a pgina mais antiga pode ser a mais referenciada.
Toda informao necessria ao algoritmo escolhido para remoo de p-
ginas pode ser armazenada em cada Moldura_de_Pgina. Para registrar o
fato de que uma pgina sofreu alterao no seu contedo (para sabermos se
ela ter que ser reescrita na memria secundria) basta manter um bit na
Moldura_de_Pgina correspondente.
Resumindo, em um sistema de memria virtual o programador pode
enderear grandes quantidades de dados, deixando para o sistema a res-
ponsabilidade de transferir o dado endereado da memria secundria para a
memria principal. Esta estratgia funciona muito bem para os algoritmos
que possuam uma localidade de referncia pequena, isto , cada referncia a
uma localidade de memria tem grande chance de ocorrer em uma rea que
relativamente perto de outras reas que foram recentemente referenciadas.
Isto faz com que o nmero de transferncias de pginas entre a memria
principal e a memria secundria diminua muito. Por exemplo, a maioria de
referncias a dados no Quicksort ocorre perto de um dos dois apontadores
que realizam a partio do conjunto, o que pode fazer com que este
algoritmo de ordenao interna funcione muito bem em um ambiente de
memria virtual para uma ordenao externa.
MODELO DE COMPUTA O PARA MEMRIA S ECUND RIA 161
Pr ogr a ma 5.1: Estrutura de dados para o sistema de paginao
I mpl e me nt a o de um Si s t e ma de Pa gi na o
A seguir vamos mostrar uma das formas possveis de se implementar um
sistema de paginao. A estrutura de dados apresentada no Programa 5.1.
O Programa apresenta tambm a estrutura de dados para representar uma
rvore binria de pesquisa, onde um apontador para um nodo da rvore
representado pelo par nmero_da_pgina (p) e posio_dentro_da_pgina (b).
Assumindo que a chave constituda por um inteiro de 2 bytes e o endereo
ocupa 2 bytes para p e 1 byte para b, o total ocupado por cada nodo da
rvore de 8 bytes. Como o tamanho da pgina de 512 bytes ento o
nmero de itens (nodos) por pgina 64.
Em algums casos pode ser necessrio manipular mais de um arquivo ao
mesmo tempo. Neste caso, uma pgina pode ser definida como no Pro-
grama 5.2, onde o usurio pode declarar at trs tipos diferentes de pginas.
Se o tipo PginaTipoA for declarado
162 CAPTULO 5. PESQUISA EM MEMRIA SECUND RIA
O diagrama da Figura 5.3 mostra a transformao do endereo virtual
para o endereo real de memria do sistema de paginao, tornando disponvel
na memria principal o registro endereado pelo programador. Os quadrados
representam resultados de processos ou arquivos, e os retngulos representam
os processos transformadores de informao.
A partir do endereo p o processo P1 verifica se a pgina que contm o
registro solicitado se encontra na memria principal. Caso a pgina esteja
na memria principal o processo P2 simplesmente retorna esta informao
para o programa usurio. Se a pgina est ausente o processo P3 determina
uma moldura para receber a pgina solicitada que dever ser trazida da
memria secundria. Caso no haja nenhuma moldura disponvel, alguma
pgina dever ser removida da memria principal para ceder lugar para a
nova pgina, de acordo com o algoritmo adotado para remoo de pginas.
Neste caso estamos assumindo o algoritmo mais simples de ser implemen-
tado, o FIFO, onde a pgina a ser removida a pgina que est na cabea da
fila de Molduras_de_Pginas. Se a pgina a ser substituda sofreu algum tipo
5. 2. A CES S O S EQENCI A L I NDEX A DO 163
Figura 5.3: Endereamento no sistema de paginao
de alterao no seu contedo ela dever ser gravada de volta na memria se-
cundria pelo processo P5. 0 processo P4 l da memria secundria a pgina
solicitada, coloca-a na moldura determinada pelo processo P3 e atualiza a
Tabela_de_Pginas.
5.2 Acesso Seqencial Indexado
O mtodo de acesso seqencial indexado utiliza o princpio da pesquisa
seqencial: a partir do primeiro, cada registro lido seqencialmente at
encontrar uma chave maior ou igual a chave de pesquisa. Para aumentar a
eficincia, evitando que todos os registros tenham que ser lidos seqencial-
mente do disco, duas providncias so necessrias: (i) o arquivo deve mantido
ordenado pelo campo chave do registro, (ii) um arquivo de ndi ces contendo
164 CAPTULO 5. PESQUISA EM MEMRIA SECUNDARIA
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.
A Figura 5.4 mostra um exemplo da estrutura de um arquivo seqencial
indexado para um conjunto de 15 registros. No exemplo, cada pgina tem
capacidade para armazenar 4 registros do arquivo de dados e cada entrada do
ndice de pginas armazena a chave do primeiro registro de cada pgina e o
endereo da pgina no disco. Por exemplo, o ndice relativo primeira
pgina informa que ela contm registros com chaves entre 3 e 14 exclusive, o
ndice relativo a segunda pgina informa que ela contm registros com chaves
entre 14 e 25 exclusive, e assim por diante.
Figura 5.4: Estrutura de um arquivo seqencial indexado
Em um disco magntico vrias superfcies de gravao so utilizadas,
conforme ilustra a Figura 5.5. 0 disco magntico dividido em crculos
concntricos chamados trilhas. Quando o mecanismo de acesso est posi-
cionado em uma determinada trilha, todas as trilhas que esto verticalmente
alinhadas e possuem mesmo dimetro formam um cilindro. Neste caso, uma
referncia a um registro que se encontre em uma pgina de qualquer trilha do
cilindro no requer o deslocamento do mecanismo de acesso e o nico tempo
necessrio o de latncia rotacional, que o tempo necessrio para que o
incio do bloco que contenha o registro a ser lido passe pela cabea de lei-
tura/gravao. A necessidade de deslocamento do mecanismo de acesso de
uma trilha para outra responsvel pela parte maior do custo para acessar os
dados e chamado de tempo de busca (seek time).
Pelo fato de combinar acesso indexado com a organizao seqencial o
mtodo chamado de acesso seqencial indexado. Para aproveitar as carac-
tersticas do disco magntico e procurar minimizar o nmero de deslocamen-
tos do mecanismo de acesso utiliza-se um esquema de ndices de cilindros e de
pginas. Dependendo do tamanho do arquivo e da capacidade da memria
principal disponvel possvel acessar qualquer registro do arquivo de dados
realizando apenas um deslocamento do mecanismo de acesso. Para tal, um
ndice de cilindros contendo o valor de chave mais alto dentre os registros
5.2. ACESSO SEQENCIAL INDEXADO 165
Figura 5.5: Disco magntico
de cada cilindro mantido na memria principal. Por sua vez, cada cilindro
contm um ndice de blocos ou ndice de pginas, conforme mostrado na
Figura 5.4. Para localizar o registro que contenha uma chave de pesquisa so
necessrios os seguintes passos:
1. Localize o cilindro correspondente chave de pesquisa no ndice de
cilindros;
2. Desloque o mecanismo de acesso at o cilindro correspondente;
3. Leia a pgina que contm o ndice de pginas daquele cilindro;
4. Leia a pgina de dados que contm o registro desejado.
Desta forma, o mtodo de acesso seqencial indexado possibilita tanto o
acesso seqencial quanto o acesso randmico. Entretanto, este mtodo
adequado apenas para aplicaes nas quais as operaes de insero e de
retirada ocorrem com baixa freqncia. Sua grande vantagem a garantia de
acesso aos dados com apenas um deslocamento do mecanismo de acesso do
disco magntico. Sua grande desvantagem a inflexibilidade: em um
ambiente muito dinmico, com muitas operaes de insero e retirada, os
dados tm que sofrer reorganizaes freqentes. Por exemplo, a adio de um
registro com a chave 6 provoca um rearranjo em todos os registros do
arquivo da Figura 5.4.
Para contornar este problema necessrio criar reas de armazena-
mento (ou reas de overflow) para receber estes registros adicionais at que a
prxima reorganizao de todo o arquivo seja realizada. Normalmente, uma
rea de armazenamento reservada em cada cilindro, alm de uma
166 CAPTULO 5. PESQUISA EM MEMRIA SECUND RIA
grande rea comum para ser utilizada quando alguma rea de algum cilindro
tambm transborde. Assim, em ambientes realmente dinmicos, os tempos
de acesso se deterioram rapidamente. Entretanto, em ambientes onde apenas
a leitura de dados necessria, como no caso dos discos ticos de apenas-
leitura, o mtodo de acesso indexado seqencial bastante eficiente e
adequado, conforme veremos na seo seguinte.
Discos t i c o s de Ape nas - Le i t ur a
Os discos ticos de apenas-leitura, conhecidos como CD-ROM (Compact
Disk Read Only Memory), tm sido largamente utilizados para distribuio
de grandes arquivos de dados. 0 interesse crescente sobre os discos CD-ROM
devido a sua capacidade de armazenamento (600 Megabytes) e baixo custo
para o usurio final. As principais diferenas entre o disco CD-ROM e o
disco magntico so:
1. o CD-ROM um meio de apenas-leitura e, portanto, a estrutura da
informao armazenada esttica;
2. a eficincia na recuperao dos dados afetada pela localizao dos
dados no disco e pela seqncia com que so acessados;
3. devido velocidade linear constante as trilhas possuem capacidade
varivel e o tempo de latncia rotacional varia de trilha para trilha.
Ao contrrio dos discos magnticos, a trilha no disco CD-ROM tem a
forma de uma espiral contnua, embora para efeito de estudo analtico cada
volta da espiral possa ser considerada como uma trilha. Ele possui cerca de
300.000 setores de tamanho fixo de 2 Kbytes, distribudos em aproxima-
damente 20.000 trilhas. Como a velocidade linear de leitura constante, o
tempo de latncia rotacional varia de cerca de 60 milissegundos para as
trilhas mais internas at 138 milissegundos para as trilhas mais externas. Por
outro lado, o nmero de setores por trilha aumenta de 9 para a trilha mais
interna at 20 para a trilha mais externa.
No CD-ROM o tempo de busca (seek time) para acesso a trilhas mais
distantes demanda mais tempo que no disco magntico devido necessidade
de deslocamento do mecanismo de acesso e mudanas na rotao do disco.
Entretanto, possvel acessar um conjunto de trilhas vizinhas sem nenhum
deslocamento do mecanismo de leitura. Esta caracterstica dos discos CD-
ROM
,
denominada varredura esttica. Nos discos atuais a amplitude de
varredura esttica pode atingir at 60 trilhas ( 30 trilhas a partir da trilha
corrente). 0 acesso a trilhas dentro da amplitude da varredura esttica
consome 1 milissegundo por trilha adicional, sendo realizado por um pequeno
deslocamento angular do feixe de laser a partir da trilha corrente, chamada
5.2. ACESSO SEQENCIAL INDEXADO 167
de ponto de ncora. Neste caso, o tempo de procura desprezvel se
comparado com o tempo de latncia rotacional. Para acessar trilhas fora da
varredura esttica o tempo de procura varia de 200 at 600 milissegundos.
Conforme mostrado na seo imediatamente anterior, a estrutura seqen-
cial indexada permite tanto o acesso seqencial quanto o acesso randmico
aos dados. Nos discos magnticos a estrutura seqencial indexada imple-
mentada mantendo-se um ndice de cilindros na memria principal. Neste
caso, cada acesso demanda apenas um deslocamento do mecanismo de acesso,
desde que cada cilindro contm um ndice de pginas com o maior valor de
chave em cada pgina daquele cilindro. Entretanto, para aplicaes
dinmicas esta condio no pode ser mantida se um nmero grande de
registros tem que ser adicionado ao arquivo. No caso dos discos CD-ROM
esta organizao particularmente interessante devido natureza esttica da
informao.
O conceito de cilindro em discos magnticos pode ser estendido para os
discos CD-ROM. Barbosa e Ziviani (1992) denominaram o conjunto de
trilhas cobertas.por uma varredura esttica de cilindro tico. 0 cilindro tico
difere do cilindro de um disco magntico em dois aspectos: (i) as trilhas de
uma varredura esttica que compem um cilindro tico podem se sobrepor a
trilhas de outro cilindro tico com ponto de ncora prximo; (ii) como as
trilhas tm capacidade varivel, os cilindros ticos com ponto de ncora em
trilhas mais internas tm capacidade menor do que cilindros ticos com
ponto de ncora em trilhas mais externas.
Em um trabalho analtico sobre discos ticos Christodoulakis e Ford (
1988) demonstraram que o nmero de deslocamentos e a distncia total
percorrida pela cabea tica de leitura so minimizados quando (i) as trilhas
de duas varreduras estticas consecutivas no se sobrepem, (ii) a cabea de
leitura se movimenta apenas em uma direo durante a recuperao de um
conjunto de dados.
A estrutura seqencial indexada pode ser implementada eficientemente
no CD-ROM considerando a natureza esttica da informao e a capacidade
de varredura esttica do mecanismo de leitura. A partir destas observaes,
Barbosa e Ziviani (1992) propuseram uma estrutura seqencial indexada
para discos CD-ROM na qual o mecanismo de leitura posicionado em
cilindros ticos pr-selecionados, com o objetivo de evitar sobreposio de
varreduras e minimizar o nmero de deslocamentos da cabea de leitura.
Para tal, a estrutura de ndices construda de maneira que cada pgina de
ndices faa referncia ao maior nmero possvel de pginas de dados de um
cilindro tico.
A Figura 5.6 mostra esta organizao para um arquivo exemplo de 3
Megabytes, alocado a partir da trilha 1940 do disco, no qual cada pgina
ocupa 2 Kbytes (equivalente a 1 setor do disco). Supondo que o mecanismo
de leitura tenha uma amplitude de varredura esttica de 8 trilhas, na posio
168 CAPTULO 5. PESQUISA EM MEMRIA S ECUND RIA
Figura 5.6: Organizao de urn arquivo indexado seqencial para o CD-ROM
de trilha nmero 1940 possvel acessar aproximadamente 78 setores sem
deslocamento da cabea de leitura. Assim sendo, para obter uma organizao
seqencial indexada para este arquivo so necessrios os seguintes passos:
1. Alocar o arquivo no disco determinando a trilha inicial e calculando a
trilha final que ele deve ocupar;
2. Computar o nmero total de cilindros ticos para cobrir todas as tri-
lhas do arquivo sem que haja sobreposio de trilhas. Determine os
respectivos pontos de ncora;
3. Construir um ndice de cilindros ticos, o qual dever conter o valor de
chave mais alto associado aos registros que esto dentro de cada
cilindro tico. 0 ndice de cilindros ticos deve ser mantido na memria
principal;
4. Construir um ndice de pginas para cada cilindro tico. Este ndice
dever conter o valor de chave mais alto de cada pgina e deve ser
armazenado na trilha central ou ponto de ncora de cada cilindro tico.
Para recuperar uma dada chave de pesquisa o primeiro passo obter o
endereo do cilindro tico que contm a chave consultando o ndice de cilin-
dros ticos na memria principal. 0 mecanismo de leitura ento deslocado
para o ponto de ncora selecionado na nica operao de busca necessria. A
seguir, o ndice de pginas lido e a pgina de dados contendo a chave de
pesquisa poder ser encontrada dentro dos limites da varredura esttica. Os
detalhes para obteno do nmero de trilhas que um arquivo deve ocupar a
partir de determinada posio no disco, os pontos de ncora dos cilindros
ticos, ou quaisquer outros, podem ser obtidos em Barbosa e Ziviani (1992).
5.19. RVORES DE PESQUISA 169
5.3 rvores de Pesquisa
As rvores binrias de pesquisa introduzidas na Seo 4.3 so estruturas de
dados muito eficientes quando se deseja trabalhar com tabelas que caibam in-
teiramente na memria principal do computador. Elas satisfazem condies e
requisitos diversificados e conflitantes, tais como acesso direto e seqencial,
facilidade de insero e retirada de registros e boa utilizao de memria.
Vamos agora considerar o problema de recuperar informao em grandes
arquivos de dados que estejam armazenados em memria secundria do tipo
disco magntico. Uma forma simplista de resolver este problema utilizando
rvores binrias de pesquisa armazenar os nodos da rvore no disco e os
apontadores esquerda e direita de cada nodo se tornam endereos de disco
ao invs de endereos de memria principal. Se a pesquisa for realizada uti-
lizando o algoritmo de pesquisa para memria principal visto anteriormente
sero necessrios da ordem de log
2
n acessos a disco, significando que um
arquivo com n = 10
6
registros necessita aproximadamente log
2
10
6
20
buscas no disco.
Para diminuir o nmero de acessos a disco, os nodos da rvore podem ser
agrupados em pginas, conforme ilustra a Figura 5.7. Neste exemplo, o
formato da rvore muda de binrio para quaternrio, com quatro filhos por
pgina, onde o nmero de acessos a pginas cai para metade no pior caso.
Para arquivos divididos em pginas de 127 registros, possvel recuperar
qualquer registro do arquivo com trs acessos a disco no pior caso.
Fi gura 5.7: rvore binria dividida em pginas
A forma de organizar os nodos da rvore dentro de pginas muito im-
portante sob o ponto de vista do nmero esperado de pginas lidas quando se
realiza uma pesquisa na rvore. A rvore da Figura 5.7 tima sob este
aspecto. Entretanto, a organizao tima difcil de ser obtida durante a
construo da rvore, tornando-se um problema de otimizao muito com-
170 CAPTULO 20. PESQUISA EM MEMRIA SECUND RIA
plexo. Um algoritmo bem simples, o da alocao seqencial, armazena os
nodos em posies consecutivas na pgina medida em que vo chegando,
sem considerar o formato fsico da rvore. Este algoritmo utiliza todo o
espao disponvel na pgina, mas os nodos dentro da pgina esto relacio-
nados pela localidade da ordem de entrada das chaves e no pela localidade
dentro da rvore, o que torna o tempo de pesquisa muito pior do que o tempo
da rvore tima.
Um mtodo de alocao de nodos em pginas que leva em considerao a
relao de proximidade dos nodos dentro da estrutura da rvore foi proposto
por Muntz e Uzgalis (1970). No mtodo proposto, o novo nodo a ser inserido
sempre colocado na mesma pgina do nodo pai. Se o nodo pai estiver em uma
pgina cheia, ento uma nova pgina criada e o novo nodo colocado no
incio da nova pgina. Knuth (1973) mostrou que o nmero esperado de
acessos a pginas em uma pesquisa na rvore muito prxih (1973) mostrou
que o nmero esperado de acessos a pginas em uma pesquisa na rvore
muito prximo do timo. Entretanto, a ocupao mdia das pginas
extremamente baixa, da ordem de 10%, o que torna o algoritmo invivel para
aplicaes prticas.
Uma soluo brilhante para este problema, simultaneamente com uma
proposta para manter equilibrado o crescimento da rvore e permitir in-
seres e retiradas a vontade, o assunto da prxima seo.
5.3.1 rvores B
O objetivo desta seo o de apresentar uma tcnica de organizao e manu
teno de arquivos atravs do uso de rvores B (Bayer e McCreight, 1972). A
origem do nome rvores B nunca foi explicada pelos autores, R. Bayer e E.
McCreight, cujo trabalho foi desenvolvido no Boeing Scientific Research
Labs. Alguns autores sugerem que o "B" se refere a "Boeing", enquanto
Comer (1979) acha apropriado pensar em "B-trees" como "Bayer-trees", por
causa das contribuies de R. Bayer ao assunto. Outras introdues ao
assunto podem ser encontradas em Comer (1979), Wirth (1976), e Knuth (
1973).
Definio e Al gor i t mos
Quando uma rvore de pesquisa possui mais de um registro por nodo ela
deixa de ser binria. Estas rvores so chamadas n-rias, pelo fato de
possurem mais de dois descendentes por nodo. Nestes casos os nodos so
mais comumente chamados de pginas.
A rvore B n-ria. Em uma rvore B de ordem m temos que:
1. cada pgina contm no mnimo m registros (e m + 1 descendentes) e
5.3. RVORES DE PESQUISA 171
no mximo 2m registros (e 2m + 1 descendentes), exceto a pgina raiz
que pode conter entre 1 e 2m registros;
2. todas as pginas folha aparecem no mesmo nvel.
Uma rvore B de ordem m = 2 com 3 nveis pode ser vista na Figura 5.8.
Todas as pginas contm 2, 3, ou 4 registros, exceto a raiz que pode conter um
registro apenas. Os registros aparecem em ordem crescente da esquerda para
a direita. Este esquema representa uma extenso natural da organizao da
rvore binria de pesquisa. A Figura 5.9 apresenta a forma geral de uma
pgina de uma rvore B de ordem m.
Figura 5.9: Nodo de uma rvore B de ordem m com 2m registros
A estrutura de dados rvore B ser utilizada para implementar o tipo
abstrato de dados Dicionrio, com as operaes Inicializa, Pesquisa, Insere e
Retira. A estrutura e a representao do Dicionrio apresentada no
Programa 5.3, onde mm significa 2m. 0 procedimento Inicializa extrema-
mente simples, conforme ilustra o Programa 5.4.
Um procedimento Pesquisa para rvore B semelhante ao algoritmo
Pesquisa para rvore binria de pesquisa, conforme pode ser visto no Pro-
grama 5.5. Para encontrar um registro x, primeiro compare a chave que
rotula o registro com as chaves que esto na pgina raiz, at encontrar o
intervalo onde ela se encaixa. Depois, siga o apontador para a subrvore
correspondente ao intervalo citado e repita o processo recursivamente, at
que a chave procurada seja encontrada ou ento uma pgina folha seja atin-
gida (no caso um apontador nulo). Na implementao do Programa 5.5 a
172 CAPTULO 5. PESQUISA EM MEMRIA SECUND RIA
Programa 5.4: Procedimento para inicializar uma rvore B
localizao do intervalo onde a chave se encaixa obtida atravs de uma pes-
quisa seqencial. Entretanto, esta etapa pode ser realizada de forma mais
eficiente atravs do uso de pesquisa binria (vide Seo 4.2).
Vamos ver agora como inserir novos registros em uma rvore B. Em
primeiro lugar preciso localizar a pgina apropriada onde o novo registro
deve ser inserido. Se o registro a ser inserido encontra seu lugar em uma
pgina com menos de 2m registros, o processo de insero fica limitado quela
pgina. Entretanto, quando um registro precisa ser inserido em uma pgina j
cheia (com 2m registros), o processo de insero pode provocar a criao de
uma nova pgina. A Figura 5.10, parte (b), ilustra o que acontece quando o
registro contendo a chave 14 inserido na rvore da parte (a). 0 processo
composto pelas seguintes etapas:
1. O registro contendo a chave 14 no encontrado na rvore, e a pgina 3
(onde o registro contendo a chave 14 deve ser inserido) est cheia.
2. A pgina 3 dividida em 2 pginas, o que significa que uma nova pgina
4 criada.
3. Os 2m+1 registros (no caso so 5 registros) so distribudos igualmente
entre as pginas 3 e 4, e o registro do meio (no caso o registro contendo
a chave 20) movido para a pgina pai no nvel acima.
5.3. RVORES DE PESQUISA
Fi gur a 5. 10: Insero em uma rvore B de ordem 2
No esquema de insero apresentado acima, a pgina pai tem que aco-
modar um novo registro. Se a pgina pai tambm estiver cheia, ento o
mesmo processo de diviso tem que ser aplicado de novo. No pior caso, o
processo de diviso pode se propagar at a raiz da rvore e, neste caso, a
rvore aumenta sua altura de um nvel. E interessante observar que uma
rvore B somente aumenta sua altura atravs da diviso da raiz.
Um primeiro refinamento do procedimento Insere pode ser visto no Pro-.
grama 5.6. 0 procedimento contm um outro procedimento interno recur-
sivo, de nome Ins, de estrutura semelhante ao Programa 5.5 acima. Quando
um apontador nulo encontrado, significa que o ponto de insero foi lo-
calizado. Neste momento o parmetro Cresceu passa a indicar este fato
informando que um registro vai ser passado para cima atravs do parmetro
173
174 CAPTULO 5. PESQUISA EM MEMRIA SECUND RIA
RegRetorno para ser inserido na prxima pgina que contenha espao para
acomod-lo. Se Cresceu = t r ue no momento do retorno do procedimento Ins
para o procedimento Insere significa que a pgina raiz foi dividida e ento uma
nova pgina raiz deve ser criada para acomodar o registro emergente,
fazendo com que a rvore cresca na altura.
pr ocedur e Insere (Reg: Registro; var Ap: Apontador);
procedure Ins (Reg:Registro; Ap:Apontador; var Cresceu:Boolean;
var RegRetorno:Registro; var ApRetorno:Apontador);
Programa 5.G: Primeiro refinamento do algoritmo Insere na rvore B
O procedimento Insere utiliza o procedimento auxiliar InsereNaPgina
mostrado no Programa 5.7.
5.3. RVORES DE PESQUISA 175
176 CAPITULO 5. PESQUISA EM MEMRIA SECUND RIA
Pr ogr a ma 5.8: Refinamento final do algoritmo Insere
A Figura 5.11 mostra o resultado obtido quando se insere uma seqncia
de chaves em uma rvore B de ordem 2: A rvore da Figura 5.11, parte (a),
obtida aps a insero da chave 20, a rvore da parte (b) obtida aps a
insero das chaves 10, 40, 50 e 30 na rvore da parte (a), a rvore da parte
5.3. RVORES DE PESQUISA 177
(c) obtida aps a insero das chaves 55, 3, 11, 4, 28, 36, 33, 52, 17, 25 e
13 na rvore da parte (b) e, finalmente, a rvore da parte (d) obtida aps a
insero das chaves 45, 9, 43, 8 e 48.
Figura 5.11: Crescimento de uma rvore B de ordem 2
A ltima operao a ser estudada de retirada. Quando a pgina que
contm o registro a ser retirado uma pgina folha a operao simples. No
caso de no ser uma pgina folha, o registro a ser retirado deve ser primeiro
substitudo por um registro contendo uma chave adjacente (antecessora ou
sucessora), como no caso da operao de retirada de registros em rvores
binrias de pesquisa, conforme mostrado na Seo 4.3. Para localizar uma
chave lexicograficamente antecessora, basta procurar pela pgina folha mais
direita na subrvore esquerda. Por exemplo, a antecessora da chave 30
na rvore da Figura 5.11 (d) a chave 28.
To logo o registro seja retirado da pgina folha, necessrio verificar se
pelo menos m registros passam a ocupar a pgina. Quando menos do que m
registros passam a ocupar a pgina significa que a propriedade rvore B
violada. Para reconstituir a propriedade rvore B necessrio tomar
emprestado um registro da pgina vizinha. Conforme pode ser verificado na
Figura 5.12, existem duas possibilidades:
1. O nmero de registros na pgina vizinha maior do que m: basta tomar
um registro emprestado e traz-lo para a pgina em questo via pgina
pai. A Figura 5.12 (a) mostra a retirada da chave 3.
178 CAPTULO 5. PESQUISA EM MEMRIA SECUND RIA
2. No existe um nmero suficiente de registros na pgina vizinha (a pgina
vizinha possui exatamente m registros): neste caso o nmero total de
registros nas duas pginas 2m 1 e, conseqentemente, as duas
pginas tm que ser fundidas em uma s, tomando emprestado da pgina
pai o registro do meio, o que permite liberar uma das pginas. Este
processo pode se propagar at a pgina raiz e no caso em que o nmero
de registros da pgina raiz fica reduzido a zero ela eliminada, causando
reduo na altura da rvore. A Figura 5.12 (b) mostra a retirada da chave
3.
(b) Pgina vizinha possui exatamente m registros
Figura 5.12: Retirada da chave 3 na rvore B de ordem m = 1
O procedimento Retira apresentado no Programa 5.9. 0 procedimento
contm um outro procedimento interno recursivo, de nome Ret. No proce-
dimento Ret, quando a pgina que contm o registro a ser retirado uma
pgina folha a operao simples. No caso de no ser uma pgina folha, a
tarefa de localizar o registro antecessor realizada pelo procedimento An-
tecessor. A condio de que menos do que m registros passam a ocupar a
pgina sinalizada pelo parmetro Diminuiu, fazendo com que o procedi-
mento Reconstitui seja ativado.
procedure Retira (Ch : TipoChave; var Ap : Apontador);
var Diminuiu : Boolean;
Aux : Apontador;
procedure Ret(Ch:TipoChave; var Ap:Apontador; var Diminuiu:Boolean);
var Ind, j : integer;
5.29. RVORES DE PESQUISA 179
180 CA P T UL O 30. PES QUI S A EM MEMR I A S ECUNDA R I A
5.3. RVORES DE PESQUISA 181
182 CAPTULO 5. PESQUISA EM MEMRIA SECUNDRIA
5.3.2 rvores B*
Existem vrias alternativas para implementao da rvore B original. Uma
delas a rvore B*. Em uma rvore B*, todos os registros so armazenados
no ltimo nvel (pginas folhas). Os nveis acima do ltimo nvel constituem
um ndice cuja organizao a organizao de uma rvore B.
A Figura 5.14 mostra a separao lgica entre o ndice e os registros que
constituem o arquivo propriamente dito. No ndice s aparecem as chaves,
sem nenhuma informao associada, enquanto nas pginas folha esto todos
os registros do arquivo. As pginas folha so conectadas da esquerda para a
direita, o que permite um acesso seqencial mais eficiente do que o acesso
atravs do ndice. Alm do acesso seqencial mais eficiente, as rvores B*
apresentam outras vantagens sobre as rvores B, como a de facilitar o acesso
concorrente ao arquivo, conforme veremos adiante.
Para recuperar um registro, o processo de pesquisa inicia-se na raiz da
rvore e continua at uma pgina folha. Como todos os registros residem nas
folhas, a pesquisa no pra se a chave procurada for encontrada em uma
pgina do ndice. Neste caso o apontador direita seguido at que uma
pgina folha seja encontrada. Esta caracterstica pode ser vista na rvore B*
da Figura 5.15 onde as chaves 29, 60, e 75 aparecem no ndice e em registros
do arquivo. Os valores encontrados ao longo do caminho so irrelevantes
desde que eles conduzam pgina folha correta.
Como no h necessidade do uso de apontadores nas pginas folha
possvel utilizar este espao para armazenar uma quantidade maior de re-
gistros em cada pgina folha. Para tal devemos utilizar um valor de m
diferente para para as pginas folha. Isto no cria nenhum problema para os
algoritmos de insero pois as metades de uma pgina que est sendo par-
ticionada permanecem no mesmo nvel da pgina original antes da partio (
algo semelhante acontece com a retirada de registros).
A estrutura de dados rvore B* apresentada no Programa 5.10.
O procedimento Pesquisa deve ser implementado como no Programa 5.11.
33.3. RVORES DE PESQUISA 183
184
CAPTULO 5. PESQUISA EM MEMRIA SECUND RIA
Figur a 5.15: Exemplo de uma rvore B"
A operao de insero de um registro em uma rvore B* essencial-
mente igual insero de um registro em uma rvore B. A nica diferena
que quando uma folha dividida em duas, o algoritmo promove uma cpia
da chave que pertence ao registro do meio para a pgina pai no nvel anterior,
retendo o registro do meio na pgina folha da direita.
A operao de retirada em uma rvore B* relativamente mais simples
do que em uma rvore B. 0 registro a ser retirado reside sempre em uma
pgina folha, o que torna sua remoo simples, no havendo necessidade de
utilizao do procedimento para localizar a chave antecessora (vide
procedimento Antecessor do Programa 5.9). Desde que a pgina folha fique
pelo menos com metade dos registros, as pginas do ndice no precisam ser
modificadas, mesmo se uma cpia da chave que pertence ao registro a ser re-
tirado esteja no ndice. A Figura 5.16 mostra a rvore B* resultante quando a
seguinte seqncia de chaves retirada da rvore B* da Figura 5.15: 5 19 22
60; 9. Observe que a retirada da chave 9 da rvore da Figura 5.16, parte (a),
provoca a reduo da rvore.
5.3.3 Acesso Conc or r e nt e em rvores B*
Em muitas aplicaes o acesso simultneo ao banco de dados por mais de um
usurio fator importante. Nestes casos, permitir acesso para apenas um
processo de cada vez pode criar um gargalo inaceitvel para o sistema de
banco de dados. Concorrncia ento introduzida para aumentar a uti-
lizao e melhorar o tempo de resposta do sistema. Deste modo o uso de
rvores B* em tais sistemas deve permitir o processamento simultneo de
vrias solicitaes diferentes.
Entretanto, existe a necessidade de se criar mecanismos chamados pro-
tocolos para garantir a integridade tanto dos dados quanto da estrutura.
Considere a situao em que dois processos estejam simultaneamente aces-
sando o banco de dados. Em um determinado momento, um dos processos
est percorrendo uma pgina para localizar o intervalo onde a chave de pes-
quisa se encaixa e seguir o apontador para a subrvore correspondente, en-
quanto o outro processo est inserindo um novo registro que provoca divises
5. 35. R V OR ES DE PES QUI S A 185
Fi gur a 5.16: Retirada de registros em rvores B*
de pginas no mesmo caminho da rvore. Pode acontecer que o processo que
est percorrendo a pgina pode obter um apontador que fica apontando para
uma subrvore errada ou para um endereo inexistente.
Uma pgina chamada segura quando se sabe que no existe possibi-
lidade de modificaes na estrutura da rvore, como conseqncia de uma
operao de insero ou de retirada naquela pgina. Cabe lembrar que a
operao de recuperao no altera a estrutura da rvore, ao contrrio das
operaes de insero ou retirada, que podem provocar modificaes na es-
trutura da rvore. No caso de operaes de insero, uma pgina conside-
rada segura se o nmero atual de chaves naquela pgina menor do que 2m.
No caso de operaes de retirada, uma pgina considerada segura quando o
nmero de chaves na pgina maior do que m. Os algoritmos para acesso
concorrente fazem uso destes fatos para aumentar o nvel de concorrncia em
uma rvore B*.
Bayer e Schkolnick (1977) apresentam um conjunto de trs diferentes
alternativas de protocolos para travamentos
1
(lock protocols) que asseguram
a integridade dos caminhos de acesso aos dados da rvore B*, e, ao mesmo
tempo, permitem acesso concorrente. Em uma das alternativas pro-postas a
operao de recuperao trava (ou retm) uma pgina to logo ela seja lida,
de modo que outros processos no possam interferir com a pgina. Na
medida em que a pesquisa continua em direo ao nvel seguinte
1
Um protocolo para travamento um mecanismo que assegura a modificao de apenas
uma pgina de cada vez na rvore.
186 CAPTULO 36. PESQUISA EM MEMRIA SECUNDARIA
da rvore, a trava aplicada na pgina antecessora liberada, permitindo a
leitura das pginas por outros processos.
Um processo executando uma operao de recuperao chamado pro-
cesso leitor, enquanto um processo executando uma operao de insero ou
de retirada chamado processo modificador. A operao de modificao
requer protocolos mais sofisticados, porque tal operao pode modificar as
pginas antecessoras nos nveis acima. Em uma das alternativas apresentadas
por Bayer e Schkolnick (1977), o processo modificador coloca um
travamento exclusivo em cada pgina acessada, podendo mais tarde liberar
o travamento caso a pgina seja segura.
Vamos apresentar a seguir o protocolo para processos leitores e o
protocolo para processos modificadores relativos alternativa mais
simples dentre as trs alternativas apresentadas por Bayer e Schkolnick
(1977). Estes protocolos utilizam dois tipos de travamento:
1. o travamento-para-leitura, que permite um ou mais leitores acessarem
os dados, mas no permite insero ou retirada de chaves;
2. o travamento-exclusivo, que permite qualquer tipo de operao na
pgina (quando um processo recebe este tipo de travamento, nenhum
outro processo pode operar na pgina).
O protocolo para processos leitores :
(0) Coloque um travamento-para-leitura na raiz;
(1) Leia a pgina raiz e faa-a pgina corrente;
(2) Enquanto a pgina corrente no uma pgina folha faa {o n de
travamentos-para-leitura mantidos pelo processo = 1 }
(3) Coloque um travamento-para-leitura no descendente apropriado;
(4) Libere o travamento-para-leitura na pgina corrente;
(5) Leia a descendente cia pgina corrente e faa-a pgina corrente.
O protocolo para processos modificadores :
(0) Coloque um travamento-exclusivo na raiz;
(1) Leia a pgina raiz e faa-a pgina corrente;
(2) Enquanto a pgina corrente no uma pgina folha faa {o nmero
de travamentos-exclusivos mantidos pelo processo 1 }
(3) Coloque um travamento-exclusivo no descendente apropriado;
(4) Leia a descendente da pgina corrente e faa-a pgina corrente;
(5) Se a pgina corrente segura ento libere todos os travamentos
mantidos sobre as pginas antecessoras da pgina corrente.
5.37. RVORES DE PESQUISA 187
Para exemplificar o funcionamento do modelo do protocolo para proces-
sos modificadores considere a modificao da pgina y da rvore B* apre-
sentada na Figura 5.17. Assuma que as pginas , , e so seguras, e a pgina
y no segura. Antes da execuo do anel principal (passos 2 a 5 do
algoritmo), um travamento-exclusivo colocado na pgina raiz, e a pgina
lida e examinada. A seguir a seguinte seqncia de eventos ocorre:
Passo 3: Um travamento-exclusivo sobre a pgina
solicitado;
Passo 4: Aps receber o travamento-exclusivo a pgina
lida;
Passo 5: Desde que a pgina segura, o travamento-exclusivo sobre a
pgina a e liberado, permitindo o acesso a pgina a para outros
processos;
Passo 3: Um travamento-exclusivo sobre a pgina solicitado;
Passo 4: Aps receber o travamento-exclusivo a pgina lida;
Passo 5: Desde que a pgina no segura, o travamento-exclusivo
sobre a pgina mantido;
Passo 3: Um travamento-exclusivo sobre a pgina solicitado;
Passo 4: Aps receber o travamento-exclusivo, a pgina b lida;
Passo 5: Desde que a pgina segura, os travamentos-exclusivos sobre
as pginas (e
podem ser liberados.
A soluo apresentada acima requer um protocolo bem simples e ainda
assim permite um nvel razovel de concorrncia. Essa soluo pode ser
melhorada em relao ao nvel de concorrncia com a utilizao de protocolos
mais sofisticados. Por exemplo, o processo modificador pode fazer uma "
reserva" em cada pgina acessada e mais tarde modificar a reserva para
travamento-exclusivo caso o processo modificador verifique que as mo-
dificaes a serem realizadas na estrutura da rvore devero se propagar at a
pgina com reserva. Essa soluo aumenta o nvel de concorrncia, desde que
as pginas com reserva possam ser lidas por outros processos.
Os tipos de travamentos referidos aqui so aplicados ao nvel fsico do
banco de dados. Em um banco de dados cujo acesso aos dados realizado
atravs de uma rvore B*, a unidade de transferncia dos dados da memria
secundria para a memria principal a pgina. Deste modo, os protocolos de
travamento so aplicados neste nvel.
A implementao dos travamentos descritos acima pode ser obtida usando
semforos. De acordo com Dijkstra (1965), um semforo um inteiro
188 CAPTULO 38. PESQUISA EM MEMRIA SECUNDARIA
Figura 5.17: Parte de uma rvore B*
no negativo que pode ser modificado somente pelas operaes wait e signal,
assim descritas: wait (s): when s > 0 do s := s 1; e signal (s): s := s + 1. A
operao s := s + 1 indivisvel, isto , somente um processo consegue
realiz-la de cada vez. Por exemplo, se dois processos A e B querem realizar
signal (s) ao mesmo tempo para s = 3, ao final s = 5. Se a operao s := s + l
no indivisvel e as duas operaes atribuem o resultado 4 a s, o resultado
final pode ser 4 (e no 5). Outra referncia sobre semforos, bem como sua
aplicao para sincronizar processos concorrentes, pode ser encontrada em
Lister (1975).
Outro importante aspecto a ser considerado em um ambiente de proces-
samento concorrente o problema de deadlock. 0 deadlock ocorre quando
dois processos esto inserindo um registro cada um em pginas adjacentes
que estejam cheias. Neste caso cada um dos processos fica esperando pelo
outro eternamente. Lister (1975) mostra que o deadlock pode ser evitado
atravs da eliminao de dependncias circulares entre processos e recursos.
Esta condio pode ser satisfeita atravs do uso da estrutura em rvore para
ordenar todas as solicitaes para acessar o banco de dados. Basta que os
algoritmos usem as operaes de travamento de cima para baixo, isto , da
pgina raiz para as pginas folha. Bayer e Schkolnick (1977) provaram que
as solues apresentadas so livres de deadlock.
5. 3. R V OR ES DE PES QUI S A 189
5.3.4 Consideraes Prat i cas
A rvore B simples, de fcil manuteno, eficiente e verstil. A rvore B
permite acesso seqencial eficiente, e o custo para recuperar, inserir, e
retirar registros do arquivo logartmico. O espao utilizado pelos dados ,
no mnimo, 50% do espao reservado para o arquivo. Oespao utilizado
varia com a aquisio e liberao da rea utilizada, medida em que o
arquivo cresce ou diminui de tamanho. As rvores B crescem e diminuem
automaticamente, e nunca existe necessidade de uma reorganizao completa
do banco de dados. O emprego de rvores B em ambientes onde o acesso
concorrente ao banco de dados necessrio vivel e relativamente simples
de ser implementado.
Um bom exemplo de utilizao prtica de rvores B* o mtodo de
acesso a arquivos da IBM, chamado VSAM (Keehn e Lacy, 1974; Wagner,
1973). VSAM um mtodo de acesso a arquivos de aplicao geral que
permite tanto o acesso seqencial eficiente, bem como as operaes de in-
sero, retirada e recuperao em tempo logartmico. Comparado com a
organizao indexado seqencial, o mtodo VSAM oferece as vantagens da
alocao dinmica de memria, garantia de utilizao de no mnimo 50% da
memria reservada ao arquivo, e nenhuma necessidade de reorganizao
peridica de todo o arquivo. O VSAM considerado uma evoluo do antigo
ISAM, o qual utiliza o mtodo indexado seqencial (vicie Seo 5.2).
Anlise
Pelo que foi visto acima, as operaes de insero e retirada de registros em
uma rvore B sempre deixam a rvore balanceada. Alm do mais, o caminho
mais longo em uma rvore B de ordem m com N registros contm no mximo
cerca de log
,m+1
N
pginas. De fato, Bayer e McCreight (1972) provaram que
os limites para a altura mxima e altura mnima de uma rvore B de ordem
m contendo N registros so
O custo para processar uma operao de recuperao de um registro
cresce com o logaritmo base m do tamanho do arquivo. Para se ter uma idia
do significado da frmula acima, considere a Tabela 5.1. Uma rvore B de
ordem 50, representando um ndice de um arquivo de um milho de registros,
permite a recuperao de qualquer registro com 4 acessos ao disco, no pior
caso. Na realidade o nmero de acessos no caso mdio e 3.
A altura esperada de uma rvore B no conhecida analiticamente, pois
ningum foi capaz de apresentar um resultado analtico. A partir do clculo
analtico do nmero esperado de pginas para os quatro primeiros nveis
CAPTULO 5. PESQUISA EM MEMRIA SECUND RIA
Tamanho Tamanho do arquivo
da pgina 1 . 0 0 0 10.000 100.000 1.000.000 10.000.000
10 3 4 5 6 7
50 2 3 3 4 4
100 2 2 3 3 4
150 2 2 3 3 4
Tabela 5.1: Nmero de acessos a disco, no pior caso, para tamanhos variados de pginas e
arquivos usando rvore B
contados das pginas folha em direo pgina raiz 'de uma rvore 2-3 (ou
rvore B de ordem m = 1) obtido por Eisenbarth, Ziviani, Gonnet, Mehlhorn
e Wood (1982, p. 159), eles propuseram a seguinte conjetura: a altura
esperada de uma rvore 2-3 randmica (vide definio de rvore de pesquisa
randmica na Seo 4.3) com N chaves
Outras medidas de complexidade relevantes para as rvores B randmicas
so:
1. A utilizao de memria cerca de ln 2 para o algoritmo original pro-
posto por Bayer e McCreight (1972). Isto significa que as pginas tm
uma ocupao de aproximadamente 69% da rea reservada aps N
inseres randmicas em uma rvore B inicialmente vazia.
2. No momento da insero, a operao mais cara a partio da pgina
quando ela passa a ter mais do que 2m chaves, desde que a operao
envolve a criao de uma nova pgina, o rearranjo das chaves e a in-
sero da chave do meio na pgina pai localizada no nvel acima. Uma
medida de complexidade de interesse Pr{ j parties}, que corres-
ponde probabilidade de que j parties ocorram durante a N-sima
insero randmica. No caso da rvore 2-3
190
5. 3. RVORES DE PESQUISA 191
No caso de uma rvore B de ordem m = 70, Pr{ 1 ou mais parties}
0, 01. Em outras palavras, em 99% das vezes nada acontece em termos
de parties durante uma insero.
3. Considere o acesso concorrente em rvores B. Bayer e Schkolnick (1977)
propuseram a tcnica de aplicar um travamento na pgina segura mais
prof unda (Psmp) no caminho de insero. De acordo com o que foi
mostrado na Seo 5.3.3, uma pgina segura se ela contm menos do
que 2m chaves. Uma pgina segura a mais profunda de um caminho
de insero se no existir outra pgina segura abaixo dela.
Desde que o travamento da pgina impede o acesso de outros processos
interessante saber qual a probabilidade de que a pgina segura mais
profunda esteja no primeiro nvel. Estas medidas esto relacionadas
com as do item anterior. No caso da rvore 2-3
Novamente, no caso de uma rvore B de ordem m = 70, em 99% das
vezes a pgina segura mais profunda (Psmp) est localizada em uma
pgina folha, o que permite um alto grau de concorrncia para proces-
sos modificadores. Estes resultados mostram que solues muito com-
plicadas para permitir o uso de concorrncia de operaes em rvores
B no trazem grandes benefcios porque, na maioria das vezes, o tra-
vamento ocorrer em pginas folha, o que permite alto grau de con-
corrncia mesmo para os protocolos mais simples.
Maiores detalhes sobre os resultados analticos apresentados acima po-
dem ser obtidos em Eisenbarth et al. (1982).
192 CAPTULO 5. PESQUISA EM MEMRIA SECUNDARIA
Observaes Finais
Existem inmeras variaes sobre o algoritmo original da rvore B. Uma
delas a rvore B*, tratada na Seo 5.3.2.
Outra importante modificao a tcnica de transbordamento (ou
tcnica de overflow) proposta por Bayer e McCreight (1972) e Knuth (1973).
A idia a seguinte: assuma que um registro tenha que ser inserido em uma
pgina cheia que contenha 2m registros. Ao invs de particion-la, ns
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, ns
olhamos para a pgina irm esquerda. Se ambas estiverem cheias, ento a
partio ter que ser realizada. 0 efeito desta modificao o de produzir
uma rvore com melhor utilizao de memria e uma altura esperada menor.
Esta alterao produz uma utilizao de memria de cerca de 83% para uma
rvore B randmica.
Qual a influncia de um sistema de paginao no comportamento de
uma rvore B? Desde que o nmero de nveis de uma rvore B muito pe-
queno (apenas 3 ou 4) se comparado com o nmero de molduras de pginas,
o sistema de paginao garante que a pgina raiz esteja sempre presente na
memria principal, desde que a poltica de reposio de pginas adotada seja
a poltica LRU. 0 esquema LRU faz tambm com que as pginas a serem
particionadas em uma insero estejam automaticamente disponveis na
memria principal.
Finalmente, importante observar que a escolha do tamanho adequado da
ordem m da rvore B geralmente feita em funo das caractersticas de
cada computador. Por exemplo, em um computador com memria virtual
paginada, o tamanho ideal da pgina da rvore corresponde ao tamanho da
pgina do sistema, e a transferncia de dados da memria secundria para a
memria principal e vice-versa realizada pelo sistema operacional. Estes
tamanhos variam de 512 bytes at 4096 bytes, em mltiplos de 512 bytes.
Notas Bibliogrficas
O material utilizado na Seo 5.1 sobre um modelo de computao para
memria secundria veio de Lister (1975). As rvores B foram introduzi-das
por Bayer e McCreight (1972). Comer (1979) discute rvores B sob um
ponto de vista mais prtico. Wirth (1976) apresenta uma implementao dos
algoritmos de insero e de retirada; Gonnet e Baeza-Yates (1991) apre-
sentam uma implementao do algoritmo de insero. A principal referncia
utilizada no item concorrncia em rvores B veio de Bayer e Schkolnik (1977).
EXERCCIOS 193
E x e r c c i o s
1) a) Construa uma rvore B de ordem m = 1 para as seguintes chaves: 15,
10, 30, 40, 5, 20, 12.
b) Retire a chave 15 e depois a chave 20 da rvore obtida acima.
2) Neste trabalho voc deve apresentar uma implementao do conjunto
de procedimentos para criao de um ambiente de memria virtual
paginada em Pascal, conforme descrito na Secao 5.1.
Ao implementar o sistema voc deve ter em mente que o conjunto de
procedimentos dever permitir a o usurio incorporar facilmente um
ambiente de memria virtual ao seu programa para poder organizar o
fluxo de dados entre a memria primria e a memria secundria. Para
tal procure colocar todos os procedimentos e declaraes de tipos em
um nico arquivo chamado SMV.PAS. Este arquivo poder ser
incorporado a qualquer programa escrito em Pascal, o qual dever
aparecer antes das declaraes de variveis do usurio.
O tamanho mximo de cada estrutura de dados utilizada pelo sistema
dever ser definido atravs de constantes que podero facilmente ser
ajustadas pelos usurios diretamente n o arquivo SMV.PAS, de acordo
com suas convenincias.
O que cada aluno deve fornecer:
a) Uma listagem completa do conjunto de procedimentos precedida
de documentao pertinente. A descrio de cada procedimento
dever conter pelo menos a sua funo e a de seus parmetros. De-
pendendo da complexidade de cada procedimento pode ser inte-
ressante descrever sucintamente a lgica do mdulo obtido (evite
descrever o que bvio).
b) Uma listagem de um programa de demonstrao (DEMO) que
mostre claramente ao usurio como utilizar o pacote SMV.PAS. O
programa DEMO deve servir tambm para mostrar toda a
flexibilidade e potencial do SMV.PAS.
c) Teste do Sistema
Para testar os vrios mdulos do sistema de paginao voc deve
gerar um arquivo em disco contendo algumas pginas (para fins de
teste voc pode utilizar uma pgina de tamanho pequeno, digamos
32 bytes). 0 arquivo de teste em disco dever conter as pginas de
uma rvore binria de pesquisa sem balanceamento, conforme
mostrado no Programa 5.1.
194 CAP TULO 5. PESQUISA EM MEMRIA SECUNDARIA
Para mostrar o pleno funcionamento do sistema importante criar
procedimentos para mostrar o contedo de todas as pginas em
disco, da fila de Moldura_de_Pginas e da Tabela_de_Pginas. Es-
tes procedimentos devem ser invocados pelo programa de teste
nos momentos mais interessantes para se ver o comportamento do
sistema (talvez seja interessante realizar uma adaptao do
programa DEMO para fins de testar o SMV conforme descrito
acima). A impresso de todos estes momentos deve ser fornecida
junto com a listagem do programa de teste.
3) O objetivo deste trabalho projetar e implementar um sistema de
programas para recuperar, inserir e retirar registros de um arquivo que
pode conter at alguns poucos milhes de registros. A aplicao que
utiliza o arquivo bastante dinmica, existindo um grande nmero de
consultas e atualizaes (inseres, retiradas e alteraes de registros).
Alm do mais a aplicao requer periodicamente a recuperao total ou
parcial dos registros na ordem lexicogrfica das chaves. Es-tas
caractersticas sugerem fortemente a utilizao de rvore B como
estrutura de dados. 0 que fazer:
a) Para implementar os algoritmos de pesquisa, insero e retirada em
uma rvore B de ordem m utilize o pacote SMV.PAS proposto em
exerccio acima, para criar um ambiente de memria virtual e
resolver o problema de fluxo de dados entre as memrias primria
e secundria.
b) Para testar o seu sistema de programas para uma rvore B de
ordem m = 2, utilize a seguinte seqncia de chaves: Insero:
20; 10 40 50 30; 55 3 11 4 28; 36; 33 52 17 25 13; 45 9 43 8 48;
A cada ponto-e-vrgula voc dever imprimir a rvore. Retirada:
45 30 28; 50 8; 10 4 20 40 55; 17 33 11 36; 3 11 52; A cada
ponto-e-vrgula voc dever imprimir a rvore.
c) Para termos uma idia da eficincia do mtodo de acesso cons-
trudo faa a medida do tempo de execuo para:
a) Construir rvores B de tamanhos 1.000, 10.000 e 50.000 cha-
ves geradas randomicamente atravs de um gerador de nme-
ros aleatrios. A medida de tempo deve ser tomada de forma
independente para cada uma das trs rvores. A ordem m das
rvores deve ser tal que o tamanho da pgina seja igual ou
menor do que 512 bytes.
EX ER C CI OS 19 5
b) Para a maior das trs rvores que voc conseguiu construir
gere aleatoriamente um conjunto de 200 chaves e realize uma
pesquisa na rvore para cada chave. Caso haja chaves que
no estejam presentes no arquivo informe quantas pesquisas
foram com sucesso e quantas foram sem sucesso. Com esta
medida podemos ter uma idia do tempo aproximado para
pesquisar um registro no arquivo.
Ateno: procure interpretar os resultados obtidos. Por exemplo,
voc deve informar qual foi o nmero de Molduras_de_Pginas
utilizadas para os experimentos acima (com 256 Kbytes de
memria real disponvel possvel manter cerca de 120 molduras
na memria principal). Quaisquer outras observaes relevantes
devem ser relatadas.
Observaes:
a) A pesquisa da chave de um registro dentro de uma pgina da
rvore B pode ser feita atravs de uma pesquisa seqencial.
b) A deciso sobre a documentao a ser apresentada fica por conta
do aluno.
4) Modifique a implementao do procedimento original apresentado no
Programa 5.5 para que a pesquisa da chave dentro de uma pgina da
rvore B seja realizada atravs de um pesquisa binria.
Apndice A
Programas C do Captulo 1
197
198 PROGRAMAS EM C DO CAPTULO 1
PROGRAMAS EM C DO CAPTULO 1 199
200 PROGRAMAS EM C DO CAPTULO 1
PROGRAMAS EM C DO CAPTULO 1 201
Apndice B
Programas C do Captulo 2
203
204 PROGRAMAS EM C DO CAPTULO 2
PROGRAMAS EM C DO CAPTULO 2 205
206 PROGRAMAS EM C DO CAPTULO 2
PROGRAMAS EM C DO CAPTULO 2 207
208 PR OGR AMAS EM C DO CAP TUL O 2
PROGRAMAS EM C DO CAPTULO 2 209
210 PR OGR AMAS EM C DO CAP TUL O 2
PROGRAMAS EM C DO CAPTULO 2 211
212 PR OGR AMAS EM C DO CAP TUL O 2
PROGRAMAS EM C DO CAPTULO 2
213
214 PR OGR AMAS EM C DO CAP TUL O 2
PROGRAMAS EM C DO CAPTULO 2 215
Apndice C
Programas C do Captulo 3
217
218 PR OGR AMAS EM C DO CAP TUL O 3
PROGRAMAS EM C DO CAPTULO 3 219
PR OGR AMAS EM C DO CAP TUL O 3
220
PROGRAMAS EM C DO CAPTULO 3
221
Apndice D
Programas C do Captulo 4
223
224 PR OGR AMAS EM C DO CAP TUL O 4
PROGRAMAS EM C DO CAPTULO 4
225
226 PR OGR AMAS EM C DO CAP TUL O 4
PROGRAMAS EM C DO CAPTULO 4
227
228 PR OGR AMAS EM C DO CAP TUL O 4
PROGRAMAS EM C DO CAPTULO 4 229
230 PROGRAMAS EM C DO CAPTULO 4
PROGRAMAS EM C DO CAPTULO 4
231
232 PROGRAMAS EM C DO CAPTULO 4
PROGRAMAS EM C DO CAPTULO 4
233
234 PR OGR AMAS EM C DO CAP TUL O 4
PROGRAMAS EM C DO CAPTULO 4 235
236 PROGRAMAS EM C DO CAPTULO 4
PROGRAMAS EM C DO CAPTULO 4. 237
238 PROGRAMAS EM C DO CAPTULO 4
PROGRAMAS EM C DO CAPTULO 4 239
240 PROGRAMAS EM C DO CAPTULO 4
PROGRAMAS EM C DO CAPTULO 4 241
Apndice E
Programas C do Captulo 5
243
244 PROGRAMAS EM C DO CAPTULO 5
PROGRAMAS EM C DO CAPTULO 5 245
246 PROGRAMAS EM C DO CAPTULO 5
PROGRAMAS EM C DO CAPTULO 5 247
248 PROGRAMAS EM C DO CAPTULO 5
PROGRAMAS EM C DO CAPTULO 5 249
250 PR OGR AMAS EM C DO CAP TUL O 5
PROGRAMAS EM C DO CAPTULO 5 251
Apndice F
Caracteres ASCII
253
Apndice G
Referncias Bibliogrficas
Adel'son-Vel'skii, G.M. e Landis, E.M. (1962) "An Algorithm for the Or-
ganization of Information", Doklady Akademia Nauk USSR 146 (2),
263-266, Traduo para o Ingls em Soviet Math. Doklay 3, 1962,
1259-1263.
Aho, A.V., Hoperoft J.E. e Ullman J.D. (1974) The Design and Analysis of
Computer Algorithms. Addison-Wesley, Reading, Mass.
Aho, A.V., Hoperoft, J.E. e Ullman, J.D. (1983) Data Structures and Al-
gorithms. Addison-Wesley, Reading, Mass.
Albuquerque, L.C.A. e Ziviani, N. (1985) "Estudo Emprico de uma Nova
Implementao para o Algoritmo de Construo da Arvore Patricia".
V Congresso da Sociedade Brasileira de Computao, Porto Alegre,
RGS, 254-267.
rabe, J.N.C. (1992) Comunicao Pessoal, Belo Horizonte, MG.
Barbosa, E.F. e Ziviani, N. (1992) `"Data Structures and Access Methods
for Read-Only Optical Disks". Baeza-Yates, R. e Manber, U. (Eds.) in
Computer Science: Research and Applications, Plenum Publishing Corp.
, New York, NY, 189-207.
Bayer, R. (1971) "Binary B Trees for Virtual Memory", ACM SIGFIDET
Workshop, San Diego, 219-235.
Bayer, R. (1972) "Symmetric Binary B-Trees: Data Structure and Mainte-
nance Algoritms", Acta Informatica 1 (4), 290-306.
Bayer, R. e McCreight, E.M. (1972) "Organization and Maintenance of
Large Ordered Indices". Acta Informatica 1(3), 173-189.
255
256 REFERNCIAS BIBLIOGRFICAS
Bayer, R. e Schkolnick, M. (1977) "Concurrency of Operations on B-trees:
Acta Informatica 9(1), 1-21.
Carvalho, M.L.B. (1992) Comunicao Pessoal, Belo Horizonte, MG.
Clancy, M. e Cooper, D. (1982) Oh! Pascal. W . W. Norton, New York, NY.
Comer, D. (1979) "The Ubiquitous B-tree," ACM Computing Surveys 11(2),
121-137.
Cooper, D. (1983) Standard Pascal User Reference Manual. W . W . Norton,
New York, NY.
Cormem, T.H., Leiserson, C.E. e Rivest, R.L. (1990) Introduction to Algo-
rithms. McGraw-Hill e The Mit Press, Cambridge, Mass.
Dahl, O.J., Dijkstra, E.W. e Hoare, C.A.R. (1972) Structured Programming.
Academic Press, New York, NY.
Dijkstra, E.W. (1965) "Co-operating Sequential Processes". In Programming
Languages F. Genuys (ed.), Academic Press, New York, NY.
Dijkstra, E.W. (1971) A Short Introduction to the Art of Programming.
Technological University Endhoven.
Dijkstra, E.W. (1976) A Discipline of Programming. Prentice-Hall, En-
glewood Cliffs, NJ.
Eisenbarth, B., Ziviani, N., Gonnet, G.H., Mehlhorn, K. e Wood, D. (1982) "
The Theory of Fringe Analysis and Its Application to 2-3 Trees and B-
Trees", Information and Control 55 (1-3), 125-174.
Feller, W. (1968) An Introduction to Probability Theory and Its Applications.
Vol. 1, Wiley, New York, NY.
Flajolet, P. e Vitter, J.S. (1987) "Average-case Analysis of Algorithms and
Data Structures". Technical Report 718, INRIA, Frana.
Floyd, R.W. (1964) "Treesort". Algorithm 243, Communications ACM 7(12),
701.
Furtado, A.L. (1984) Comunicao Pessoal, Rio de Janeiro, RJ.
Garey, M.R. e Johnson, D.S. (1979) Computers and Intractability A Guide
to the Theory of NP-Completeness. Freeman, San Francisco, CA.
REFERNCIAS BIBLIOGRFICAS 257
Gonnet, G.H. e Baeza-Yates, R. (1991) Handbook of Algorithms and Data
Structures. Addison-Wesley, Reading, Mass., segunda edio. Graham,
R.L., Knuth, D.E. e Patashnik, O. (1989) Concrete Mathematics.
Addison-Wesley, Reading, Mass.
Greene, D.H. e Knuth, D.E. (1982) Mathematics for the Analysis of Algo-
rithms. Birkhanser, Boston, Mass.
Guibas, L. e Sedgewick, R. (1978) "A Dichromatic Framework for Balanced
Trees", 19th Annual Symposium on Foundations of Computer Science,
IEEE.
Hibbard, T.N. "Some Combinatorial Properties of Certain Trees with Ap-
plications to Searching and Sorting". Journal of the ACM 9, 13-28.
Hoare, C.A.R. (1962) "Quicksort". The Computer Journal 5(1), 10-15.
Hoare, C.A.R (1969) "Axiomatic Bases of Computer Programming". Com
-
munications ACM 12 (10), 576-583.
Horowitz, E. e Sahni, S. (1978) Fundamentals of Computer Algorithms.
Computer Science Press, Potomac, Maryland.
Jensen, K. e Wirth, N. (1974) Pascal User Manual and Report. Springer-
Verlag, Berlin, segunda edio.
Keehn, D. e Lacy, J. (1974) "VSAM Data Set Design Parameters". IBM
Systems Journal 3, 186-212.
Knott, G. (1975) "Hashing Functions". The Computer Journal 18 (3), 265-378.
Knuth, D.E. (1968) The Art of Computer Programming, Vol.1: Fundamental
Algorithms. Addison-Wesley, Reading, Mass.
Knuth, D.E. (1971) "Mathematical Analysis of Algorithms". Procedings
IFIP Congress 71, vol. 1, North Holland, Amsterdam, Holanda, 135-
143.
Knuth, D.E. (1973) The Art of Computer Programming; Volume 3: Sorting and
Searching. Addison-Wesley, Reading, Mass.
Knuth, D.E. (1976) "Big Omicron and Big Omega and Big Theta". ACM
SIGACT News 8 (2), 18-24.
Knuth, D.E. (1981) The Art of Computer Programming, Vol. 2: Seminu-
merical Algoritms. Segunda edio, Addison-Wesley, Reading, Mass.
258 REFERNCIAS BIBLIOGRFICAS
Lister, A.M. (1975) Fundamentals of Operating Systems. Macmillan, Lon-
don.
Lueker, G.S. (1980) "Some Techniques f or Solving Recurrences". ACM
Computing Surveys 12(4), 419-436.
Manber, U. (1988) "Using Induction to Design Algorithms". Communica-
tions ACM 31 (11), 1300-1313.
Manber, U. (1989) Introduction to Algorithms A Creative Approach. Addi-
son-Wesley, Reading, Mass.
Manber, U. e Myers, G. (1990) "Suffix Arrays: A New Method for On-Line
String Searches". 1st ACM-SIAM Symposium on Discrete Algorithms,
San Francisco, CA, 319-327.
Morrison, D.R. (1968) "PATRICIA - Practical Algorithm To Retrieve Infor-
mation Coded In Alphanumeric". Journal of the ACM15(4), 514-534.
Murta, C.D. (1992) Comunicao Pessoal. Belo Horizonte, MG.
Mehlhorm, K. (1984) Data Structures and Algorithms, Vol.1: Sorting and
Searching. Springer-Verlaq, Berlin.
Olivi, H. (1980) "Symmetric Binary B-Trees Revisited" , Technical Report
80-01, Interstedelijke Industrile Hogerschool Antwerpen-Mechelen, Bl-
gica.
Peterson, J. e Silberschatz, A. (1983) Operating System Concepts. Addison-
Wesley, Reading, Mass.
Sedgewick, R. (1975) "The Analysis of Quicksort Programs". Acta Inf or-
matica 7, 327-355.
Sedgewick, R. (1978) Quicksort. Garland. (tambm publicado como tese de
doutorado do autor, Stanford University, C.S. Department Techical
Report 75-492, 1975).
Sedgewick, R. (1978a) "Implementing Quicksort Programs". Communica-
tions ACM 21 (10), 847-857.
Sedgewick, I t (1988) Algorithms. Addison-Wesley, Reading, Mass., se-
gunda edio.
Shell, D.L. (1959) "A Highspeed Sorting Procedure". Communications
ACM 2(7), 30-32.
REFERNCIAS BIBLIOGRFICAS 259
Sleator, D.D. e Tarjan, R.E. (1985) "Self-Adjusting Binary Search Trees".
Journal of the ACM 32, 652-686.
Stanat, D.F. e McAllister, D.F. (1977) Discrete Matematics in Computer
Science. Prentice-Hall, Englewood Cliffs, NJ, Capitulo 5, 218-274.
Standish, T.A. (1980) Data Structures Techniques. Addison-Wesley, Rea-
ding, Mass.
Tanenbaum, A.S. (1987) Operating Systems: Design and Implementation.
Prentice-Hall, Englewood Cliffs, NJ.
Tarjan, R.E. (1983) Data Structures and Network Algorithms. SIAM, Phi-
ladelphia, Pennsylvania.
Tarjan, R.E. (1985) "Amortized Computational Complexity". SIAM Journal
on Applied and Discrete Mathematics 6, 306-318.
Terada, R. (1991) Desenvolvimento de Algoritmos e Estruturas de Dados.
McGraw-Hill e Makron Books do Brasil, So Paulo, SP.
Vuillemin, J. (1978) "A Data Structure for Manipulating Priority Queues".
Communications ACM 21 (4), 309-314.
Wagner, R. (1973) "Indexing Design Considerations," IBM Systems Jour-
nal4, 351-367.
Weide, B. (1977) "A Survey of Analysis Techniques for Discrete Algo-
rithms". ACM Computing Surveys 9 (4), 291-313.
Williams, J.W.J. (1964) "Algorithm 232". Communications ACM 7(6), 347-
348.
Wirth, N. (1971) "Program Development by Stepwise Refinement ". Com-
munications ACM 14 (4), 221-227.
Wirth, N. (1974) "On The Composition of well-Structured Programs".ACM
Emputing Serveys 6 (4), 247-259.
Wirth, N. (1976) Algorithms + Data Structures = Programs. Prentice-Hall,
Englewood Cliffs, NJ.
Wirth, N. (1986) Algorithms and Data Structures. Prentice-Hall, Englewood
Cliffs, NJ.
Ziviani, N., Olivi, H. e Gonnet, G.H. (1985) "The Analysis of the Improved
Symmetric Binary B-Tree Algorithm". The Computer Journal 28 (4),
417-425.
260 REFERNCIAS BIBLIOGRFICAS
Ziviani, N. e Tompa, F.W. (1982) "A Look at Symmetric Binary B-Trees"
INFOR Canadian Journal of Operational Research and Information
Processing 20 (2), 65-81.
ndice
O notao, 13
O operaes, 12, 13
[ ] conjunto em Pascal, 27
notao, 14
[ ] teto, 8
[] - Piso, 8
somatrio, 21
2-3, rvores, 118, 190 2-3-
4, rvores, 119, 144
Adel'son-Vel'skii G.M., 143
Agrupamento em tabelas hashing, 141
Aho A.V., 2, 13, 19, 30, 36, 56, 58, 99,
143
Albuquerque L.C.A., 131
Algoritmos
anlise de, 324
classes de, 15
comparao, 1424
complexidade, 324
conceito, 1
escolha de, 1, 12, 71, 107
exponenciais, 16, 17 timos,
4, 5, 11, 24 polinomiais, 17
recursivos, 1924, 47, 79, 112
135, 170192 Alocao
dinmica, 29, 189
encadeada, 29, 38, 49, 65
Altura de rvore, 112, 126
Amortizado, custo, 30, 144
Anlise de algoritmos, 324
caso mdio, 6
de um algoritmo particular, 3 de
uma classe de algoritmos, 4 melhor
caso, 6
pior caso, 6
tcnicas de, 1824
Arabe J.N.C., 59, 100, 103, 148 rea de
armazenamento, 97, 155, 165
Arquivo
conceito, 107
definio, 28
Arranjos, definio, 26
Arvores, 83, 84, 112135, 169192, 194
2-3, 118, 190
2-3-4, 119, 144
altura de, 112, 126
auto-ajustvel, 144
AVL, 143
B, 118, 170181, 194
binrias, 118
definio, 170
tcnica de overflow, 192 B*,
182188
acesso concorrente, 184188
deadlock, 188
definio, 182
pgina segura, 185
processo leitor, 186
processo modificador, 186
protocolos, 184
semforos, 187
261
262
balanceadas, 117127, 169192
binrias, 83, 112
binrias de pesquisa, 112 binrias
de pesquisa com ba-
lanceamento, 117127
binrias de pesquisa sem ba-
lanceamento, 112117 binrias
completas, 83 caminhamento central,
115 caminho interno, 118, 143
completamente balanceadas, 117
definio, 112
digitais de pesquisa, 127135 n-
rea, 170
nvel de um nodo, 112
Patricia, 129135
randmicas, 117, 190
red-black, 144
representao de, 84, 112, 171
SBB, 118145
definio, 119
Trie, 128129
ASCII, tabela de caracteres, 253
Assinttica
complexidade, 14
dominao, 12
Assinttico
classes de comportamento, 14 18
funes que expressam, 14
Auto-ajustvel, rvores, 144 AVL,
rvores, 143
Baeza-Yates R., 4, 99, 118, 129, 143,
153, 192
Balanceada, intercalao, 9297
Balanceadas, rvores, 117127, 169
192
Barbosa E.F., 167, 168
Bayer R., 118-120, 127, 144, 147, 170,
185, 186, 188191 Binria
rvore, 83, 111127
NDICE
pesquisa, 110111
Blocos
em fitas, 93
ordenados, 92, 96
Bolha, mtodo de ordenao, 89
Bruta, fora, 16 Bubblesort, 89
Bucketsort, 71'
Cabea de lista, 38
Caminhamento em rvores, 115 Caminho
interno em rvores de pesquisa, 118,
143
Cartes, classificadora de, 71
Cartas, jogo de, 70, 73
Carvalho M.L.B., 33, 34
Casamento
de cadeias, 129
de padres, 129
Caso mdio, anlise de algoritmos, 6
CD-ROM (Compact Disk Read Only
Memory), 166
Central, caminhamento em rvores, 115
Chave
de ordenao, 69
de pesquisa, 6, 107
de tamanho varivel, 127
semi-infinita, 128, 152, 153
transformao de, 135143
Christodoulakis S., 167
Cilindro
em discos ticos, 167
em discos magnticos, 164, 167
Circulares, listas, 56
Clancy M., 25
Classes de comportamento assinttico,
1418
Classificao, vide Ordenao
Classificadoras de cartes, 71
Clustering, 141
NDICE
Colises, resoluo de, 135137, 140,
147149, 151
Comer D., 170, 192
Comparao
de algoritmos, 14
ordenao por, 70
Completa, rvore binria, 83
Complexidade
amortizada, 30, 144
anlise de, 324
assinttica, 14
constante, 15
cbica, 15
de algoritmos, 324
de espao, 5
de tempo, 5
exponencial, 16, 17
funo de, 5
linear, 15
logartmica, 15
nlogn, 15
quadrtica, 15
Concorrente, acesso em rvores B*,
184188
Conjuntos em Pascal, 27 Constante,
algoritmos de complexidade, 15
Cooper D., 25, 30
Cormen T.H., 30, 58, 99
Cbicos, algoritmos, 15
Custo
amortizado, 30, 144
funo de, 12
Dados
estruturas de
conceito, 1, 2530
escolha de, 1, 44
tipos
.
abstratos de, 23, 35, 42,
44, 47, 48, 53, 55, 82, 107,
108
tipos de, 2-3, 2530, 35, 42, 44,
47, 48, 53, 55, 82, 107,
263
108
Dahl O.J., 30
Deadlock, 188
Dicionrio, 108
Digital
rvores de pesquisa, 127135
ordenao, 71
Dijkstra E.W., 1, 2, 30, 187
Dinmica, alocao, 29, 189
Disco tico, 166168
cilindro tico, 167
feixe de laser, 166
ponto de ncora, 167
tempo de busca, 166
trilha, 166
varredura esttica, 166 Disco
magntico, 70, 91, 98, 164 cilindro,
164, 167
latncia rotacional, 164
tempo de busca, 164 trilha,
164
Distribuio, ordenao por, 70
Dominao assinttica, 12
Double hashing, vide Hashing du-
plo
Eisenbarth B., 190, 191
Encadeada, alocao, 29, 38, 49, 65
Equao de recorrncia, vide Relao de
recorrncia
Espao, complexidade, 5
Estvel, mtodo de ordenao, 69,
73, 75, 77, 81, 86
Estruturas de dados
conceito, 2530
escolha de, 1, 44
Execuo, tempo de, 324
Exponenciais, algoritmos, 16, 17
Externa
ordenao, 70, 9199, 104
pesquisa em memria, 155192
Feixe de laser, 166
264 NDICE
Feller W., 136
Fifo, (first-in-first-out), 55, 160
Filas, 55-58
Filas de prioridades, 81-83, 91, 94-96
Fitas magnticas, 70, 9194, 98
Flajolet P., 30
Floyd R.W., 84, 99
Fora bruta, 16
Ford D.A., 167
Funes
comportamento assinttico, 11 de
complexidade, 5, 1416 de
transformao, 135137 hashing,
135
piso
(LJ),
8
teto ((I), 8
Furtado A.L., 42
Garey M.R., 16, 17
Gonnet G.H., 4, 99, 118, 129, 143-145,
153, 190, 192 Graham R.L., 30
Greene D.H., 30
Guibas L., 119, 144
Hashing, 135143
duplo, 148
funes de transformao, 136
137
linear, 140
listas encadeadas, 137138
open addressing, 140143
Heaps, 83-86, 91
Heapsort, 81-86, 90
Hibbard T.N., 143 Hoare
C.A.R., 78 Hoare, C.A.
R., 30, 99
Hoperoft J.E., 2, 13, 19, 30, 36, 47, 56,
58, 99, 143
Horowitz E., 10, 30
Indireta, ordenao, 90
Insero
em rvores de pesquisa
com balanceamento, 122
sem balanceamento, 113 em
rvores B, 172
em rvores B*, 184
em filas, 55, 57, 60
em listas lineares, 36
em pilhas, 48, 50, 52
em tabelas hashing, 138, 140
ordenao por, 73-75, 89, 91
Intercalao
balanceada, 92-97
de dois arquivos, 103
ordenao por, 91-99
ISAM, 189
Jensen K., 25, 30
Johnson D.S., 16, 17
Keehn D., 189
Knott G., 136
Knuth D.E., 3, 4, 13, 30, 36, 58, 73, 76,
96, 97, 99, 112, 129, 136, 137,
140, 141, 143, 170, 192
Lacy J., 189
Landis E.M., 143
Laser, feixe de, 166
Latncia, em disco magntico, 164
Leiserson C.E., 30, 58, 99
Lfu (least-frequently-used), 159
Lifo (last-in-first-out), 47
Limite inferior
conceito, 4, 10
orculo, 10
para obter o mximo de um
conjunto, 5
para obter o mximo e o mnimo de
um conjunto, 10 Lineares,
algoritmos, 15 -
Listas
cabea de, 38, 61
circulares, 56
NDICE 265
duplamente encadeadas, 59
encadeadas (em hashing), 137-138
lineares, 3558
Lister A.M., 157, 188, 192
Localidade de referncia, 160
Lock protocols, vide Protocolos para
travamento
Logartmicos, algoritmos., 15
Lru (least-recently-used), 159, 192
Lueker G.S., 30
Mximo de um conjunto, 5
Mximo e mnimo de um conjunto, 7
11, 2324
Manber U., 30, 154
Matrizes esparsas, 59
McAllister D.F., 5, 30
McCreight E.M., 118, 170, 189, 190, 192
Mehlhorn K., 143, 190
Melhor caso, anlise de algoritmos, 6
Memria virtual, 157163
Merge, vide intercalao
Mergesort, 103
Morrison D.R., 129
Muntz R., 170
Murta C.D., 152
Myers G., 154
Notao , definio, 14
Notao O, definio, 13
Notao O, operaes, 12, 13
Olivi H., 144, 145, 147
Open addressing, 140143
Orculo, 10
Ordenao, 69106
externa, 70, 9199, 104 por
intercalao, 9199 interna,
7091
bolha, 89
bubblesort, 89
bucketsort, 71
comparao entre os mtodos, 87
91
digital, 71
estvel, 69, 73, 75, 77, 81, 86
heapsort, 8186, 90
indireta, 90
mergesort, 103
por insero, 7375, 89, 91 por
seleo, 7273, 89 quicksort,
7881, 90 radixsort, 71
shellsort, 7677, 89
por comparao, 70
por distribuio, 70
Ordenadas, listas, 75, 83
timo, algoritmo, 4, 5, 11, 24 Overflow,
tcnica de insero em rvores B,
192
Pgina
de uma rvore B, 170
em sistemas de paginao, 157
segura, 191
tamanho em uma rvore B, 192
Paginao, 157163, 192
Pai, em estrutura de rvore, 83
Paradoxo do aniversrio, 136
Partio, Quicksort, 79
Pascal, linguagem de programao,
2530
Pat array, 153
Patashnik O., 30
Patricia, 129135
Pesquisa
com sucesso, 107
em listas lineares, 36
em memria externa, 155192 em
rvores B*, 182
em memria interna, 6, 107143
binria, 110111
266 NDICE
digital, 127135
em rvores binrias, 111 em
rvores binrias com ba-
lanceamento, 117127
em rvores binrias sem ba-
lanceamento, 112117
em rvores Patricia, 129135
em rvores Trie, 128129
por comparao de chave, 108
127
por transformao de chave,
135143
seqencial, 6, 108110
seqencial rpida, 110
sem sucesso, 107
Peterson J., 157
Pilhas, 4753
Pior caso, anlise de algoritmos, 6
Piso, funo ([ J), 8
Polinomiais, algoritmos, 17
Ponto de ncora, em discos ticos, 167
Previso, tcnica de, 98
Prioridades, filas de, 8183, 9496
Processo
leitor, 186
modificador, 186
Programas, 2
Protocolos, 184
para processos leitores, 186 para
processos modificadores, 186
para travamento, 185
Quadrticos, algoritmos, 15
Quicksort, 7881, 90
mediana de trs, 81, 90
partio, 79
pequenos subarquivos, 90
piv, 7880, 90
Radixsort, 71
Randmica, rvore de pesquisa, 117, 190
Recorrncia, relao de, 18, 21, 31, 33
Recursivos, algoritmos, 1924, 47, 79,
112135
Red-black, rvores, 144
Registros, 6, 27, 107
Relao de recorrncia, 18, 21, 31, 33
Retirada de itens
em rvores B, 177
em rvores B*, 184
em rvores de pesquisa
com balanceamento, 124
sem balanceamento, 113 em
filas, 55, 57, 60
em listas lineares, 36, 39, 41
em pilhas, 48, 50, 52
em tabelas hashing, 138, 140
Rivest R.L., 30, 58, 99
Sahni S., 10, 30
S B B , rvores, 118145
Schkolnick M., 185, 186, 188, 191
Schkolnik M., 192
Sedgewick R., 58, 70, 90, 91, 96,
98, 99, 119, 129, 144, 148
Seek time, vide Tempo de busca Segura,
pgina de uma rvore B*,
185, 191
Seleo
ordenao por, 7273, 89
por substituio, 9497 Self-
adjusting, vide Auto-ajustv
e
l
Semforo, 187
Semi-infinita, chave, 128, 152, 153
Sentinelas, 72, 7476, 110 Seqencial
indexado, 163168 Seqencial,
pesquisa, 6, 108110 Shell D.L., 76, 99
Shellsort, 7677, 89
Silberschatz A., 157
Sleator D.D., 144
Stanat D.F., 5, 30
NDICE 267
Standish T.A., 143
Suffix array, 154
Tanenbaum A.S., 157
Tarjan R.E., 30, 143, 144
Tempo
complexidade de, 5
de busca
em discos ticos, 166
em discos magnticos, 164 de
execuo, .3-24
Terada R., 143
Teto, funo (1
'
1) , 8
Tipos abstratos de dados, 2-3, 35, 42,
44, 47, 48, 53, 55, 82, 107,
108
Tompa F.W., 127, 144, 145
Transbordamento, vide overflow
Transformao de chave, 135-143
duplo, 148
funes de, 136-137
listas encadeadas, 137-138
open addressing, 140-143 Trie,
128-129
Trilha
em disco tico, 166
em disco magntico, 164
Ullman J.D., 2, 13, 19, 30, 36, 47, 56,
58, 99, 143 Uzgalis R., 170
Valor mdio de uma distribuio
de probabilidades, 6
Varredura esttica, em discos ticos, .
166
Virtual, memria, 157-163
Vitter J.S., 30
VSAM, 189
Vuillemin J., 83
Wagner R., 189
Weide B., 30
Williams 3.W.3., 83, 99
Wirth N., 2, 25, 30, 99, 115, 143,
144, 147, 170, 192 Wood D., 190
Ziviani N., vii, 127, 131, 144, 145,
167, 168, 190