Professional Documents
Culture Documents
Douglas Santos
Evertt Arima
Jssica Teixeira
Pedro Gonalez
Pedro Henrique
Disciplina
& Equipe
Introduo
Funcionamento
Cenrios
o
o
Contedo
Melhor
Pior
Algoritmo
Aplicabilidade
Detalhes de Implementao
Melhorias
Fontes
Introduo
Introduo
Introduo
Funcionamento
Funcionamento
Algoritmo:
Algoritmo
Se:
O nmero de elementos a ordenar for zero ou um
ento termine (no h o que ordenar);
Seno:
Escolha um elemento do conjunto para ser o
piv;
Organize os elementos de acordo com o piv
os elementos menores ficam a esquerda do piv;
os elementos maiores ficam a direita do piv;
Algoritmo
Anlise
Melhor caso:
CN = 2 CN/2 + N = N log N
Esta situao ocorre quando cada
partio divide o arquivo em duas partes
iguais.
Cenrios
Melhor caso:
Cenrios
Uma rvore de recurso para QUICKSORT em que o PARTICIONAMENTO sempre equilibra os dois lados
igualmente (melhor caso). O tempo de execuo resultante O(n lg n).
Anlise
Caso mdio de acordo com Sedgewick
e Flajolet (19 96, p. 17):
CN 1,386 log N 2 ln N
Isso significa que em mdia o tempo de
execuo do Quicksort O(n log n).
Cenrios
Caso mdio:
Cenrios
Uma rvore de recurso para QUICKSORT em que o PARTICIONAMENTO sempre produz uma diviso de 9-para1, tendendo a um tempo de execuo de O(n lg n). FONTE:
Anlise
Pior caso:
CN = N2
O pior caso ocorre quando,
sistematicamente, o piv escolhido
como sendo um dos extremos de um
arquivo j ordenado.
Isto faz com que o procedimento de
ordenao seja chamado recursivamente
N vezes, eliminando apenas um item em
cada chamada.
Cenrios
Pior caso:
Cenrios
Uma rvore de recursividade para QUICKSORT em que o procedimento de PARTIO sempre coloca
apenas um elemento de um lado da partio (pior caso). O tempo de execuo resultante O(n 2).
Vantagens:
Desvantagens:
Aplicaes
Detalhes de Implementao:
Particionamento interno (Partitioning inplace).
Se usarmos um vetor extra, particionamento fcil de implementar, mas
no to mais fcil que vale o custo de a verso particionada de volta no
original.
Se o menor ou maior valor do vetor for o piv, temos que tomar cuidado
para os indicadores no ultrapassarem os limites esquerdo ou direito do
vetor, respectivamente.
Detalhes de Implementao:
Preservar a aleatoriedade (Preserving randomness).
O embaralhamento aleatrio desordena o vetor. Desde que trate todos os
termos nos sub-vetores uniformemente, este recurso tem a propriedade
de que estes tambm estejam aleatoriamente desordenados. Este fato
crucial para a previsibilidade do algoritmo. Uma forma alternativa para
preservar a aleatoriedade escolher um termo aleatrio para piv na
partio.
Detalhes de Implementao:
Manipulando termos com valores iguais ao piv (Handling items with
keys equal to the partitioning item's key).
melhor para as varreduras esquerda para valores maiores ou iguais ao
piv e direita para valores menores ou iguais ao piv. Apesar desta
poltica possa parecer criar trocas desnecessrias envolvendo termos de
mesmo valor, crucial para evitar tempo de execuo quadrtico em
certas aplicaes tpicas.
Melhorias:
Melhorias
Melhorias:
Melhorias
Particionamento Mediana-de-trs.
Uma segunda forma fcil de melhorar performance do quicksort
usar a medianda de uma amostra pequena de termos retirada
do sub-vetor como sendo o piv. Tal ao resultar em uma
partio melhor, mas ao custo de computar a mediana. Na
prtica, a maior parte das melhorias vm da escolha de uma
amostra de tamanho 3 e particionando no item central. Como um
bonus, pocemos usar a amostra como sentinelas nas
extremidades do vetor e remover ambos dos testes de partio.
Melhorias:
Melhorias
Entropy-optimal sorting.
Vetores com grandes quantidades de valores duplicados
aparecem com frequncia em aplicaes. Por exemplo, podemos
querer ordenar um grande arquivo de colaboradores por ano de
nascimento, ou talvez separ-los por gnero. Nestas situaes,
implementar o quicksort tem uma performance considervel,
mas pode ser melhorado de forma substancial. Por exemplo, um
sub-vetor que consiste apenas de termos de mesmo valor no
precisa ser processado novamente, mas nossa implementao
continua a particion-los em sub-vetores menores. Em uma
sitao onde h um grande nmero de valores duplicados, a
natureza recursiva do quicksort se assegura que sub-vetores
compostos inteiramente de termos de mesmo valor ocorrer com
frequncia. H potencial para uma melhora significativa.
Algoritmo de Ordenao QuickSort
Sedgewick, Robert
Algorithms
Brown University Addison-Wesley Publishing Co.
Chapter 9 page 103
Fontes
Hanson, David R.
Lecture 11 Quicksort
https://www.cs.princeton.edu/courses/archive/spr97/cs126
Boniati, Bruno B.
Universidade Federal de Santa Maria
Estrutura de dados Quicksort & Mergesort
http://www.cafw.ufsm.br/~bruno
Menotti, David
Fontes
Feofiloff, Paulo
http://www.ime.usp.br/~pf/algoritmos/
http://www.ime.usp.br/~pf/analise_de_algoritmos/
Apndice
Apndice
p, int r)
// 2
// 3
// 4
// 5
Algoritmo de Separao:
// Recebe vetor v[p..r] com p <= r. Rearranja
// os elementos do vetor e devolve j em p..r
// tal que v[p..j-1] <= v[j] < v[j+1..r].
Apndice
static int
separa (int v[], int p, int r) {
int c = v[p], i = p+1, j = r, t;
while (i <= j) {
if (v[i] <= c) ++i;
else if (c < v[j]) --j;
else {
t = v[i], v[i] = v[j], v[j] = t; ++i; --j;
}
}
// agora i == j+1
v[p] = v[j], v[j] = c;
return j;
}
Algoritmo de Ordenao QuickSort