Você está na página 1de 33

ORDENAO EXTERNA

ORDENAO EXTERNA
COM QUICKSORT.

O que ?
Ordenao

Externa um termo para uma classe de


algoritmos de ordenao que podem trabalhar sobre
grandes volumes de dados. A Ordenao Externa
necessria quando os dados que devem ser ordenados
no cabem completamente na memria principal do
computador e est contida em uma memria externa
mais lenta (ex.: HD). A Ordenao Externa tipicamente
usa uma estratgia hibrida de (sort-merge). Na fase
de ordenao, blocos de dados pequenos o bastante
para caber na memria principal so lidos, ordenados,
e escritos em um arquivo temporrio. Na fase do
merge, os sub-arquivos pr-ordenados so
combinados em um nico arquivo.

Para que serve?


A

Ordenao de Dados um clssico


problema da Cincia da Computao, dados
ordenados oferecem vantagens quando
precisamos fazer a requisio de certos
itens, ajudando eficientemente na busca
(especialmente usando um algoritmo de
busca binria).
Usando mtodos de Ordenao Externa, ns
podemos ordenar arquivos gigantes, ex.:
20Gb de dados, usando apenas 1Gb de
memria RAM.

Onde usado?
Basicamente,

a Ordenao Externa
usada em sistemas de bancos de
dados robustos, sistema de
paginao de arquivos nos modernos
SO, em softwares que tratam da Big
Data, softwares de mapeamento de
DNA e do Genoma, sistemas que
fazem o processamento de grandes
arquivos de dados coletados no
espao, etc.

Alguns exemplos de uso.


Os

bancos de dados:

MySQL;
MariaDB;
OracleDB;
MongoDB;

Geralmente fazem uso de mtodos de


ordenao externa em arquivos muito grandes,
ordenando as chaves de suas tabelas, para
assim agilizar na posterior busca desses dados;

QuickSort.
Informaes importantes sobre o QuickSort

QuickSort
O

algoritmo Quicksort um mtodo de ordenao


muito rpido e eficiente, inventado por C.A.R
Hoare em 1960, quando visitou a Universidade de
Moscou como estudante. Naquela poca, Hoare
trabalhou em um projeto de traduo de mquina
para o National Physical Laboratory. Ele criou o
Quicksort ao tentar traduzir um dicionrio de
ingls para russo, ordenando as palavras, tendo
como objetivo reduzir o problema original em
subproblemas que pudessem ser resolvidos mais
facil e rapidamente. Foi publicado em 1962 aps
uma srie de refinamentos.

QuickSort

Quicksort o algoritmo de ordenao baseado em comparaes mais


rpido que se conhece. Ele requer O(n log n) etapas na mdia,
trabalhando In-Place o que significa que seus requerimentos so
mnimos em uso de memria extra. Quicksort geralmente escrito de
forma recursiva, mas h meios de se escrever de forma no recursiva.
O algoritmo de Quicksort emprega uma estratgia de dividir para
conquistar, dividindo a lista/vetor em duas sub-listas.

Passo a passo:
o Escolhe um elemento, chamado piv, na lista de entrada.
o Reordena a lista para que todos os elementos com valores menores do

que o piv fiquem do lado esquerdo do piv, enquanto que todos os


valores maiores fiquem aps o piv (valores iguais podem ficar a direita
ou esquerda, dependendo da implementao). Ao fim do processo o
piv estar em sua posio final e haver duas sub-listas no
ordenadas, este processo chamado de Partio.
o Recursivamente ordena a sub-lista dos elementos menores e a sub-lista

QuickSort (Exemplo
grfico)

QuickSort (Exemplo
grfico)

QuickSort (Algoritmo)

QuickSort (Quiz)
1.

Qual o custo de tempo de um quicksort em


um array de tamanho n que j se encontra
ordenado? Obs.: O piv escolhido nesse caso o
ndice 0 (zero).

2.

Se ns escolhermos o elemento mdio do


vetor para cada chamada recursiva de quicksort,
qual ser o custo de tempo de execuo?

3.

Quicksort extremamente dependente da


escolha do piv. Ento, como escolher o piv?

QuickSort (Respostas
Quiz)

1. O(n^2)
Isso ocorre porque na fase da partio dever
percorrer todo o array de elementos em cada
nvel de recurso: n, n-1, n-2,... 1
O que nos d um tempo de execuo de: n+(n1)+(n-2)+...+1 ~ O(n^2) Este o pior caso!

2. O(nlog(n)). E este o melhor caso que


podemos ter com o QuickSort.

3. Deveremos preferencialmente escolher de


forma randomica o piv para cada chamada
recursiva.

QuickSort
QuickSort usado na Ordenao Externa

QuickSort Externo (in Place)


{ Particionador }
O

QuickSort Externo (In Place), faz a


ordenao dos dados contidos em um arquivo,
sem a utilizao de memria auxiliar, mas
internamente, usa uma estratgia de andar
pelos bytes do arquivo lendo e escrevendo os
valores diretamente no arquivo, ficando assim
prejudicado na velocidade de execuo devido
ao alto custo de I/O. Essa a forma mais
pura de se utilizar o algoritmo QuickSort,
pois no faz uso combinado de nenhum outro
algoritmo de ordenao.

QuickSort Externo (in


Place)

QuickSort Externo (in Place)


{ Particionador }

QuickSort + Ordenao
Externa
O

QuickSort quando usado na


ordenao externa
majoritariamente implementado
numa estratgia hibrida de
QuickSort+Merge, no
necessariamente o MergeSort
padro, usa-se uma variante do
MergeSort onde o foco juntar as
partes que vo sendo ordenadas
internamente pelo QuickSort.

QuickSort Ordenao Externa


{ Hibrido }
A

complicao de se usar o
QuickSort para ordenar arquivos
maiores do que a memria RAM
disponvel, que o algoritmo requer
que todo o vetor com os dados
esteja disponvel na RAM, para
acesso imediato, logo, arquivos
maiores do que a RAM disponvel
precisam ser particionados, tornando
impossvel o uso do QuickSort

QuickSort Ordenao Externa

{ Hibrido - Passo a Passo ...}


O

arquivo com os dados de entrada


particionado em N partes, sendo N um
mltiplo de 2, encontrado pelo algoritmo
levando em considerao a quantidade de
memria RAM disponvel no momento da
Ordenao dos Dados e o tamanho total do
arquivo. Assim teremos N arquivos de
tamanhos semelhantes. Tomaremos como
exemplo N sendo 4, assim vamos trabalhar
com o arquivo principal particionado em 4
partes.

QuickSort Ordenao Externa

{ Hibrido - Passo a Passo ...}

1. Primeiro o arquivo particionado ao meio,


gerando 2 arquivos { Q0.bin, Q1.bin, Q2.bin e
Q3.bin };
2. Em seguida cada um desses arquivos passado
pelo QuickSort (algoritmo padro, pois o tamanho
de cada arquivo cabe na memria RAM principal)
e sero particionados em { L0_0.bin + H0_0.bin,
L0_1.bin + H0_1.bin, L0_2.bin + H0_2.bin e
L0_3.bin + H0_3.bin } onde arquivos L so
arquivos contendo a parte dos dados com os
menores valores, e H contero os de maior valor,
assim teremos 8 arquivos pr-ordenados.

QuickSort Ordenao Externa

{ Hibrido - Passo a Passo ...}

3. Agora pegaremos o lado L dos arquivos, o


algoritmo ir abrir { L0_0.bin + L0_1.bin } em
um vetor, passar o vetor numa chamada do
QuickSort, e salvar em L1_0.bin e L1_1.bin,
faremos o mesmo com o restante dos arquivos L;
4. Na quarta etapa, abrir os arquivos { L1_0.bin
+ L1_2.bin } e salvar como L0_0.bin e L0_1.bin
sobrescrevendo os arquivos antigos de mesmo
nome, desta forma diminumos o uso de espao
extra no HD, fazemos isso com o restante dos
arquivos L;

QuickSort Ordenao Externa

{ Hibrido - Passo a Passo ...}

5. Na quinta etapa, o algoritmo ir abrir os arquivos


{ L0_0.bin + L0_1.bin }, passar novamente na chamada de
QuickSort, e salvar nos arquivos L1_0.bin e L1_1.bin;
6. Nessa etapa, chegaremos ao ponto em que precisamos
chamar o mtodo Merge para os arquivos L, o que ir
passar gerar um s arquivo chamado Sorted_L.bin, o qual
conter a parte contendo os menores valores do arquivo
original.
7. Agora repetimos as mesmas etapas a partir do ponto 3, s
que agora com o lado dos arquivos H;
8. Ao final destes dois processos, finalmente chamaremos
novamente a funo Merge, s que agora iremos mesclar os
arquivos Sorted_L.bin + Sorted_H.bin e ir ser gerado o
arquivo Sorted.bin que o nosso arquivo completamente
ordenado.

QuickSort Ordenao Externa

{ Algoritmo Parte 1 }

QuickSort Ordenao Externa

{ Algoritmo Parte 2 }

Vantagens e
Desvantagens
Vantagens:
Possibilidade de poder ordenar arquivos maiores do que a

memria RAM disponvel.


Pode-se fazer ordenao de arquivos muito grandes usando uma
pequena frao de memria. Ex.: 20Gb de arquivo em uma
mquina com 1Gb de RAM ou menos!
Desvantagens:
Muito lento se comparada a Ordenao Interna, pelo fato de ter

o custo das operaes de I/O no disco lento.


Faz uso de espao extra no HD, mesmo que de forma
temporria, o que pode em HDs com pouca capacidade,
ocasionar em disco cheio.
Quanto mais pedaos de arquivos, mais lento ser a ordenao
dos dados, devido ao custo de I/O e trabalhos para mesclagem
dos arquivos.

Alternativas
A

alternativa mais comum ao uso do QuickSort para


ordenao externa justamente o MergeSort, o mais
difundido o MergeSort K-Way, mas internamente, o
MergeSort poder fazer uso de algum outro mtodo de
Ordenao, inclusive do QuickSort.
Outra alternativa, o uso de Memory Maped Files
(mmap), que faz uso de um recurso de SO, onde obtm-se
o endereamento do arquivo grande atravs de ponteiros,
e o SO faz todo o trabalho em background sobre o acesso
I/O desse arquivo atravs de bufferizao. Um problema
enfrentado com esse mtodo que em sistemas de
arquitetura 32bits no se pode enderear arquivos
maiores do que 4Gb, mas em sistemas 64bits esse
problema virtualmente no existe.

QuickSort Externo Concluso


Podemos

assim concluir que o uso do


QuickSort externo, assim como
outros mtodos de ordenao
externa so de extrema importncia
no mundo da computao e
processamento de dados. Podemos
afirmar que em alguns casos a
nica alternativa para se chegar a
essa finalidade.