Académique Documents
Professionnel Documents
Culture Documents
Introdução:
Nesse trabalho foram realizados testes com os seguintes algoritmos
de ordenação: Seleção, Inserção, Bolha, Rápida, Fusão e Concha. Foram
analisados seus desempenhos nos testes e comparados com sua
complexidade oficial. Os resultados foram colocados em gráficos para fácil
visualização.
Algoritmo Concha:
Procedimento Concha( vetor:arranjo [0..N - 1] de inteiros )
Variáveis
Auxiliar:inteiro;
a:inteiro;
b:inteiro;
c:inteiro;
d:inteiro;
inicio
d := N / 2;
Faça
Inicio
A := 0;
Se ( d > 1 ) e ( c = 0 ) faça
Inicio
D := d / 2;
Fim se;
B := d;
C := 0;
Enquanto ( b < N ) faça
Inicio
Se (vetor[a] > vetor[b] ) faça
Inicio
Auxiliar := vetor[a];
Vetor[a] := vetor[b];
Vetor[b] := auxiliar;
C := 1;
Fim se;
A := a + 1;
B := b + 1;
Fim enquanto;
Fim faça Enquanto ( c = 1 ) ou ( d > 1 );
Fim;
Seleção ( N^2 ) / 2
Inserção ( N^2 ) / 4
Bolha N^2
Fusão n (lg n)
Rápida n (lg n)
Concha N ^(3/2)
Complexidade com Busca Binária:
Seleção (N^2 + 2lgN ) / 2
Inserção (N^2 + 4lgN) / 4
Bolha N^2 + lgN
Fusão (N + 1) lgN
Rápida (N + 1) lgN
Concha N^(3/2) + lgN
A aplicação da busca binária mais um algoritmo de ordenação tem
uma complexidade maior do que se aplicarmos a busca seqüencial apenas.
Se for necessário realizar apenas uma busca, é mais vantajoso utilizar a
busca seqüencial em vetores não ordenados. Para que a utilização da busca
binária junto com um algoritmo de ordenação seja mais vantajosa, deve se
utilizar o quick ou merge sort, e tem que se necessitar de no mínimo N
buscas, tal que N * X > X lgX + NlgX ou seja NX > ( X + N ) lgX, onde X
é o numero de posições do vetor.
1 – Seleção
No algoritmo de ordenação por Seleção podemos observar que os
resultados dos testes são quase idênticos às previsões oficiais de sua
complexidade, a diferença é tão ínfima que nem aparece no gráfico.
Como podemos observar na curva parabólica o algoritmo Select Sort
tem comportamento exponencial. A sua implementação invertida tem
exatamente o mesmo resultado de desempenho nos testes.
2 – Inserção
3 – Bolha
4 – Fusão
O algoritmo de ordenação por Fusão diferencia o desempenho
consideravelmente quando compara-se os resultados dos teste com as
previsões oficiais de seu desempenho, isso ocorre pois seu desempenho
oficial não leva em conta o numero de interações necessárias para se copiar
os valores do vetor auxiliar para o vetor principal, por isso aparece essa
grande diferença.
Pela curva de desempenho podemos notar que o Merge Sort está
mais para polinomial do que logarítmico, apesar de possuir lg N em seu
desempenho, isso ocorre pois possui um N multiplicando esse lg N.
5 – Rápida
O algoritmo de ordenação Rápida apresentou uma diferença notável
no desempenho verificado nos testes e na previsão de complexidade, isso
ocorreu pois a previsão é uma media dos casos da aplicação do algoritmo,
portanto em determinado cenário pode aparecer diferenças consideraveis.
Pela curva do gráfico verificamos que o Quick Sort tem
comportamento polinomial com uma leve curva logaritmica, que é quase
imperceptivel, isso devido a variavel N multiplicando o lg N.
6 – Concha
Conclusão: