25.07.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!