Professional Documents
Culture Documents
1 Introduo
Atualmente, a necessidade de ordenar grandes volumes de dados tem se tornado muito
importante para grandes corporaes, instituies governamentais, bancos e outros. Como no
possvel armazenar todos os dados na memria principal de um computador, mecanismos
eficientes de ordenao em memria secundria, tambm conhecida como ordenao externa,
devem ser utilizados.
Diferentemente dos algoritmos de ordenao interna, onde a principal operao considerada
na anlise dos algoritmos a comparao entre chaves, o principal objetivo em ordenao
externa minimizar o nmero de operaes de entrada e sada (E/S) executadas. Isto porque o
tempo para se realizar uma operao de E/S muito maior do que o tempo de uma operao da
unidade central de processamento.
A gerncia da quantidade de operaes de E/S executadas por um algoritmo de ordenao
pode ser feita de duas formas. A primeira delas quando o algoritmo de ordenao projetado
para utilizar somente a memria interna disponvel e com o objetivo de minimizar o nmero de
operaes de E/S efetuadas. Em [Leu, 00], citado que o limite inferior, considerando o nmero
de operaes de E/S, para se ordenar n registros dado por:
n
n log
b
O
K
b log
b
(I )
n
b
ser O
(II ) .
Outro fator importante diz respeito quantidade de memria extra utilizada para a ordenao
externa. Basicamente, so utilizadas duas abordagens. A primeira a ordenao in place
[Monard, 80], tambm conhecida como ordenao in situs. Nela, a entrada ordenada de
forma que o arquivo original seja sobrescrito. O mtodo utiliza somente O(log n) unidades de
memria interna, onde n o nmero de registros a serem ordenados, sendo que no necessrio
nenhuma memria externa alm da que utilizada pelo arquivo original. Na outra abordagem,
no h restrio quanto ao uso extra de memria interna ou externa.
Na seo 2, apresentado o Quicksort Externo, um algoritmo para ordenao externa
proposto por Monard [Monard, 80] que se enquadra na abordagem de ordenao in situs e
utiliza uma tcnica semelhante ao Quicksort tradicional [Hoare, 62] [Ziviani, 93]. Na seo 3, o
Quicksort Externo comparado com softwares que realizam eficientemente a ordenao
externa. Os softwares escolhidos foram o Nitrosort [Nitrosort, 03] e o Sort. O primeiro foi
escolhido por ser um produto comercial muito eficiente e o segundo por ser muito popular, j
que um aplicativo presente em vrios SOs. As principais mtricas utilizadas na avaliao
foram a quantidade de espao extra utilizado por cada um deles e a eficincia em termos de
tempo de execuo. Apesar de no ser um dos objetivos primrios, foram realizados testes com
o Quicksort tradicional fazendo uso do ambiente de memria virtual, e os resultados foram
comparados com os do Quicksort Externo. Enfim, na seo 4 o artigo concludo e alguns
estudos so propostos.
2 Quicksort Externo
O Quicksort Externo um algoritmo que utiliza o mtodo de diviso e conquista para
ordenar in situs um arquivo A = {R1,K, Rn } de n registros armazenados consecutivamente em
memria secundria de acesso randmico. Considerando que Ri, onde 1 i n , o registro que
se encontra na i-sima posio de A, o primeiro passo do algoritmo particionar A da seguinte
forma: {R1 ,K, Ri } Ri+1 Ri+ 2 K R j 2 R j 1 R j ,K, Rn , utilizando para isto um
que primeiramente ordenado o subarquivo de menor tamanho. Esta condio necessria para
que, na mdia, o nmero de subarquivos com o processamento adiado no ultrapasse log n.
Subarquivos vazios ou com um nico registro so ignorados. Caso o arquivo de entrada A
possua no mximo K registros ele ordenado em um nico passo, ou seja, cada registro do
arquivo lido e escrito uma nica vez. Um pseudocdigo, obtido de Monard [Monard, 80], para
o Quicksort Externo exibido abaixo:
procedure quicksort_externo(esq, dir);
{esq e dir so, respectivamente, os endereos do primeiro e do ltimo registro de A}
i, j: Integer;
if dir - esq >= 1 then
particao(esq, dir,i, j);
if i - esq < dir - j then {Ordena primeiro o menor subarquivo}
quicksort_externo(esq, i);
quicksort_externo(j, dir);
else
quicksort_externo(j, dir);
quicksort_externo(esq, i);
end if
end if
end procedure
RL := WL := esq;
no_buffer := 0;
Linf :=
Lsup := + ;
up_reading;
last_read;
i := esq 1;
j := dir + 1;
while RU RL do
if no_buffer < K - 1 then
if up_reading then readup() else readlow(); end if
inserir_buffer(); {insere last_read no buffer e incrementa no_buffer}
else
if RU = WU then readup();
else
if RL = WL then readlow();
else if up_reading then readup() else readlow(); end if end if
end if
if last_read.chave > Lsup then
j := WU;
writeup(last_read);
else
inserir_buffer();
if WL esq < dir - WU then
r := extractlow(); writelow(r);
else
end if
end if
end if
end do
while WL WU do r := extractlow(); writelow(r); end do
end procedure
e mantida ordenada, de forma que o maior e o menor registros possam ser removidos do
buffer com custo O(1). Esta abordagem impe a sobrecarga de manter a lista ordenada.
Porm, testes executados indicaram que tal sobrecarga no compromete o desempenho do
Quicksort Externo, desde que o buffer no seja muito grande.
Aps termos detalhado todas as caractersticas do Quicksort Externo, exibiremos agora a sua
complexidade, a qual foi demonstrada em Monard [Monard, 80]. A complexidade de melhor
n
b
caso do algoritmo O ( III ) , que ocorre, por exemplo, quando o arquivo de entrada j se
n2
encontra ordenado. A complexidade de pior caso O ( IV ) e ocorre quando um dos
K
arquivos retornados pela rotina de partio tem o maior tamanho possvel e o outro vazio, ou
seja, a rvore gerada pelas chamadas recursivas totalmente degenerada. Monard [Monard, 80]
provou que, medida que n cresce, tanto a probabilidade de ocorrncia do pior caso quanto a do
melhor tendem a zero, sendo que a probabilidade do melhor caso sempre maior do que a do
pior. Enfim, em uma demonstrao exaustiva, Monard [Monard, 80] provou que a
3 Estudos empricos
Os estudos empricos foram realizados no ambiente Cygwin [Cygwin, 03] em uma mquina
equipada com um processador AMD Atlon XP 2GHz, 512 MB de memria RAM e com o
sistema operacional Windows XP. Os arquivos utilizados nos testes continham registros de
inteiros de 4 bytes gerados aleatoriamente. Os tamanhos destes arquivos variaram de 1 MB a
1536 MB, como pode ser visto nas Tabelas 1 e 2.
Para possibilitar uma comparao justa, procurou-se por softwares eficientes que realizassem
ordenao in situs, tal como o Quicksort Externo. No entanto, como no se teve acesso a
nenhum software com tais caractersticas, foi utilizado nos testes um programa que no ordena
arquivos de forma in situs, mas que comprovadamente eficiente. O programa escolhido foi o
Nitrosort, desenvolvido pela Cole-Research [Nitrosort, 03]. O Nitrosort necessita de, no
mnimo, o dobro do espao do arquivo original na memria externa e, portanto, no pode ser
classificado como um software de ordenao in situs. Por ser um software proprietrio, no
tivemos acesso ao mtodo de ordenao externa utilizado pelo Nitrosort. No entanto, ao entrar
em contato com os desenvolvedores do mesmo, estes nos informaram que o mtodo baseado
na ordenao interna e intercalao externa de runs. Um run um segmento do arquivo
original que ordenado na memria interna. Existem vrios mtodos na literatura baseados
neste paradigma, tais como os citados em Islam [Islam, 03] e Leu [Leu, 00], sendo que o ltimo
apresenta um algoritmo timo.
Em seguida, tratou-se de delimitar a quantidade de memria interna que seria utilizada pelos
algoritmos avaliados. Foram executados testes preliminares, nos quais o Quicksort Externo
apresentou um bom desempenho para buffers capazes de armazenar 100 registros. Como
foram utilizados cinco buffers, a memria total consumida pelo Quicksort Externo foi de 2000
bytes. O Nitrosort permite variar a quantidade de memria interna utilizada, sendo que o valor
mnimo suportado de 1 MB. Para fazer uma comparao justa, procurou-se encontrar a menor
quantidade de memria com a qual o Nitrosort apresentasse um bom desempenho. Esta
quantidade foi especificada em 3 MB, j que para valores inferiores, o Nitrosort demonstrou ser
muito menos eficiente que o Quicksort Externo. O valor ideal, sugerido pelos desenvolvedores
do software, de 21 MB. Neste caso, o Nitrosort chegou a ser duas vezes mais rpido que o
Quicksort Externo. Porm, medida que o arquivo cresce, esta proporo diminui rapidamente
e, aps um determinado limite, o Quicksort Externo mais rpido. Esta caracterstica tambm
pode ser observada nos dados obtidos com 3 MB, veja Tabela 1 e Grfico 1.
Os dados coletados nos testes foram coerentes com a complexidade de caso mdio para o
Quicksort Externo exibida na seo 2. Para averiguar isto, pode-se utilizar a seguinte equao
para estimar o tempo de execuo a partir da complexidade de caso mdio:
Texe =
n n
log t (VI ) , onde t uma constante que foi obtida a partir da mdia de subb
K
Estimado
Q. E.
1.07
2.31
4.98
10.68
22.79
48.45
102.64
216.76
456.50
958.94
2009.77
3095.29
1.19
2.23
4.92
11.14
20.05
49.42
85.73
184.61
412.48
1029.41
2139.80
3890.72
Nitrosor
t
1.44
1.56
2.33
3.61
7.19
13.59
26.92
56.33
123.30
560.45
2154.42
4650.08
Q. E.
1.17
1.84
4.98
10.00
19.58
41.45
98.83
161.38
425.33
1047.64
2077.05
Sort
0.38
1.08
2.19
4.69
9.89
20.50
42.11
84.41
304.38
980.34
2137.23
Avaliando os resultados apresentados em termos das mtricas propostas na seo 1, percebese que a eficincia de tempo do Quicksort Externo est prxima tanto do Nitrosort quanto do
Sort. Sendo que, com o aumento do tamanho da entrada, o Quicksort Externo tende a ser mais
eficiente. Em contrapartida, em termos de espao de memria interna utilizada, o Quicksort
Externo cerca de 1500 vezes mais eficiente que o Nitrosort. Este valor foi obtido pela razo da
memria interna delimitada para o Nitrosort (3 MB) e a delimitada para o Quicksort Externo
(2000 B). No foi possvel fazer a mesma anlise para o Sort, pois no foi encontrado o
tamanho da memria interna que este utiliza como buffer para operaes de E/S.
Enfim, foram executados dois testes comparando o Quicksort tradicional em ambiente de
memria virtual e o Quicksort Externo. Novamente, o Quicksort Externo se mostrou mais
eficiente com o crescimento do tamanho da entrada, veja Tabela 3.
Tamanho do Arquivo (MB)
1024
1536
Quicksort Externo
2139.80
3890.72
4 Concluses
Diante do que foi apresentado, pode-se concluir que o Quicksort Externo um algoritmo
muito adequado para ambientes com poucos recursos. Isto porque ele faz ordenao in situs
de forma eficiente, mesmo com pouca memria interna disponvel. Alm disso, seu
comportamento, no que diz respeito a tempo de execuo, est prximo do comportamento
verificado para os softwares utilizados nas comparaes.
Tal comportamento era esperado, pois o Quicksort Externo, apesar de possuir uma
complexidade de pior caso quadrtica, possui uma complexidade de caso mdio prxima do
nmero mnimo de operaes de E/S necessrias para ordenar externamente um arquivo.
Como proposta para futuros trabalhos, pode-se sugerir, primeiramente, um estudo do
impacto no tempo de execuo do Quicksort Externo de diferentes estruturas de dados para
gerenciamento do buffer interno de tamanho K. Alm disso, este mesmo estudo poderia
determinar o tamanho ideal do buffer interno e dos buffers de entrada e sada para cada uma
das estruturas. Outro estudo poderia ser feito no sentido de tentar melhorar o Quicksort Externo,
visando diminuio do nmero de operaes de E/S realizadas. importante mencionar que o
problema de ordenao externa tem sido muito pesquisado e novas tcnicas e algoritmos foram
propostos aps a publicao do Quicksort Externo. Assim, um estudo poderia buscar a
conciliao das vantagens dessas novas tcnicas com as apresentadas para o Quicksort Externo
em um novo algoritmo.
Referncias Bibliogrficas
[Cygwin, 03]
[Hoare, 62]
[Islam, 03]
Islam, R., Adnan, N., Islam, N., Hossen, S. A new external sorting
algorithm with no additional disk space. Information Processing
Letters 86, p. 229233, 2003.
[Leu, 00]
[Monard, 80]
[Nitrosort, 03]
Nitrosort. Software de ordenao externa desenvolvido pela ColeResearch. Disponvel em <http://www.cole-research.com>, acessado em
agosto de 2003.
[Sedgewick, 83]
[Verkamo, 87]
[Ziviani, 93]