Comparação entre os métodos de ordenação Número de ... - UFMG
Comparação entre os métodos de ordenação Número de ... - UFMG
Comparação entre os métodos de ordenação Número de ... - UFMG
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Comparação</strong> <strong>entre</strong> <strong>os</strong> métod<strong>os</strong><br />
<strong>de</strong> or<strong>de</strong>nação<br />
Tempo <strong>de</strong> execução<br />
Algoritm<strong>os</strong> e Estruturas <strong>de</strong> Dad<strong>os</strong> II<br />
O método que levou men<strong>os</strong> tempo real para<br />
executar recebeu o valor 1 e <strong>os</strong> outr<strong>os</strong> receberam<br />
valores relativ<strong>os</strong><br />
Element<strong>os</strong> em or<strong>de</strong>m aleatória:<br />
Tempo <strong>de</strong> execução<br />
Element<strong>os</strong> em or<strong>de</strong>m <strong>de</strong>crescente<br />
3<br />
5<br />
<strong>Número</strong> <strong>de</strong> comparações<br />
Método Complexida<strong>de</strong><br />
Inserção O(n 2 )<br />
Seleção O(n 2 )<br />
Bolha O(n 2 )<br />
Shellsort O(n lg(n) 2 )<br />
Quicksort O(n lg(n))<br />
Heapsort O(n lg(n))<br />
Radixsort O(kn)<br />
Tempo <strong>de</strong> execução<br />
Element<strong>os</strong> em or<strong>de</strong>m crescente<br />
Observações<br />
Observações sobre <strong>os</strong> métod<strong>os</strong>:<br />
1. Shellsort, quicksort e heapsort têm a mesma or<strong>de</strong>m <strong>de</strong><br />
gran<strong>de</strong>za para arranj<strong>os</strong> <strong>de</strong> até 30 mil element<strong>os</strong><br />
2. O quicksort é o mais rápido para tod<strong>os</strong> <strong>os</strong> tamanh<strong>os</strong> aleatóri<strong>os</strong><br />
experimentad<strong>os</strong><br />
3. A relação heapsort/quicksort se mantém constante para tod<strong>os</strong><br />
<strong>os</strong> tamanh<strong>os</strong> <strong>de</strong> entrada<br />
4. A relação shellsort/quicksort aumenta com o tamanho da<br />
entrada<br />
5. Para arquiv<strong>os</strong> pequen<strong>os</strong> (500 element<strong>os</strong>), o shellsort é mais<br />
rápido que o heapsort (e vice versa)<br />
6. Inserção é o método mais rápido para qualquer tamanho se <strong>os</strong><br />
element<strong>os</strong> estão or<strong>de</strong>nad<strong>os</strong> (e vice versa)<br />
7. Entre <strong>os</strong> algoritm<strong>os</strong> <strong>de</strong> custo quadrático, o inserção é melhor<br />
para entradas aleatórias<br />
01/06/2012<br />
2<br />
4<br />
6<br />
1
Influência da or<strong>de</strong>m inicial d<strong>os</strong> element<strong>os</strong><br />
1. O shellsort é bastante sensível à or<strong>de</strong>nação ascen<strong>de</strong>nte<br />
ou <strong>de</strong>scen<strong>de</strong>nte da entrada<br />
2. Em arquiv<strong>os</strong> do mesmo tamanho, o shellsort executa mais<br />
rápido para arquiv<strong>os</strong> or<strong>de</strong>nad<strong>os</strong><br />
3. Em arquiv<strong>os</strong> do mesmo tamanho, o quicksort executa<br />
mais rápido para arquiv<strong>os</strong> or<strong>de</strong>nad<strong>os</strong><br />
4. O heapsort não <strong>de</strong>pen<strong>de</strong> da or<strong>de</strong>nação da entrada<br />
Seleção<br />
É vantaj<strong>os</strong>o quanto ao número <strong>de</strong> moviment<strong>os</strong> <strong>de</strong><br />
registr<strong>os</strong>, que é O(n)<br />
Deve ser usado para arquiv<strong>os</strong> com element<strong>os</strong> muito<br />
gran<strong>de</strong>s, <strong>de</strong>s<strong>de</strong> que o número <strong>de</strong> element<strong>os</strong> a<br />
or<strong>de</strong>nar seja pequeno<br />
Quicksort<br />
É o algoritmo mais eficiente que existe para uma gran<strong>de</strong><br />
varieda<strong>de</strong> <strong>de</strong> situações<br />
O algoritmo é recursivo, o que <strong>de</strong>manda uma pequena<br />
quantida<strong>de</strong> <strong>de</strong> memória adicional<br />
Pior caso realiza O(n 2 ) operações<br />
O principal cuidado a ser tomado é com relação à<br />
escolha do pivô<br />
A escolha do elemento do meio do arranjo melhora o<br />
<strong>de</strong>sempenho quando o arquivo está total ou parcialmente<br />
or<strong>de</strong>nado<br />
O pior caso tem uma probabilida<strong>de</strong> muito pequena <strong>de</strong> ocorrer<br />
quando <strong>os</strong> element<strong>os</strong> forem aleatóri<strong>os</strong><br />
Geralmente se usa a mediana <strong>de</strong> uma am<strong>os</strong>tra <strong>de</strong> três element<strong>os</strong><br />
para evitar o pior caso<br />
Usar inserção em partições pequenas melhora<br />
<strong>de</strong>sempenho significativamente<br />
7<br />
9<br />
11<br />
Inserção<br />
É o mais interessante para arquiv<strong>os</strong> com men<strong>os</strong> do<br />
que 20 element<strong>os</strong><br />
O método é estável<br />
P<strong>os</strong>sui comportamento melhor do que o método da<br />
bolha que também é estável<br />
Sua implementação é tão simples quanto as<br />
implementações do bolha e seleção<br />
Para arquiv<strong>os</strong> já or<strong>de</strong>nad<strong>os</strong>, o método é O(n)<br />
O custo é linear para adicionar alguns element<strong>os</strong> a<br />
um arquivo já or<strong>de</strong>nado<br />
Shellsort<br />
Bom para or<strong>de</strong>nar um número mo<strong>de</strong>rado <strong>de</strong><br />
element<strong>os</strong><br />
Quando encontra um arquivo parcialmente or<strong>de</strong>nado<br />
trabalha men<strong>os</strong><br />
Heapsort<br />
É um método <strong>de</strong> or<strong>de</strong>nação elegante e eficiente<br />
Não necessita <strong>de</strong> nenhuma memória adicional<br />
Executa sempre em tempo proporcional a<br />
O(n lg(n))<br />
Aplicações que não po<strong>de</strong>m tolerar eventuais<br />
variações no tempo esperado <strong>de</strong> execução <strong>de</strong>vem<br />
usar o heapsort<br />
01/06/2012<br />
8<br />
10<br />
12<br />
2