Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva...

19
Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva [email protected]

Transcript of Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva...

Page 1: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Classificação de dados por Intercalação: MergeSort

Prof. Alexandre Parra Carneiro da [email protected]

Page 2: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Principais Métodos

Classificação por Trocas

Classificação por Seleção

Classificação por Inserção

Classificação por Intercalação

Page 3: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Classificação por Intercalação

Caracteriza-se pela utilização do padrão de projeto Divisão e Conquista.

Idéia básica (MergeSort): é muito fácil criar uma seqüência ordenada a partir de duas outras também ordenadas.

Page 4: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Divisão e Conquista: MergeSort

Divisão: se S tem zero ou um elemento, retorna-se S (já está ordenado). Em qualquer outro caso (S tem pelo menos 2 elementos), removem-se todos os elementos de S e colocam-se em duas seqüências, S1 e S2, cada um contendo aproximadamente a metade dos elementos de S;

Recursão: ordena-se recursivamente as seqüências S1 e S2;

Conquista: os elementos são colocados de volta em S, unindo as seqüências S1 e S2 em uma seqüência ordenada.

Page 5: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Exemplo Divisão e Conquista (MergeSort)

85 24 63 45 17 31 96 50

9685 24 63 45 17 31 50

4585 24 63 17 31 96 50

2485 17 31 96 5063 45

(a) Fase de Divisão

24 85 45 63 17 31 50 96

17 3124 45 63 85 50 96

8524 634517 31 9650

85 24 63 45 17 31 96 50

(b) Fase de Conquista

Page 6: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Exemplo do Processo MergeSort

Page 7: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort: Junção ou Merge

Utiliza um vetor temporário (Vtemp) para manter o resultado da ordenação dos 2 sub-vetores.

Page 8: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort: Junção ou Merge

Após a ordenação, o conteúdo de Vtemp é transferido para o vetor.

Page 9: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort: Junção ou Merge

Número de operações críticas ?

Page 10: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort: Junção ou Merge

Page 11: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Visão Geral do Processo MergeSort

Page 12: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort (parte do pseudo-código)Algoritmo merge(S1,S2,S): { Entrada: Seqüências ordenadas S1 e S2 e uma seqüência vazia de S, todos

implementados como arranjos. } { Saída: Seqüência ordenada S contendo os elementos de S1 e S2. }

i j 0 enquanto i < S1.size() e j < S2.size() faça se S1.get(i) <= S2.get(j) então S.addLast(S1.get(j)) { copia o i-nésimo elemento de S1 para o final de S } i i + 1 senão S.addLAst(S2.get(j)) { copia o j-nésimo elemento de S2 para o final de S } j j + 1 fimse fimenquanto enquanto i < S1.size() faça { copia os elementos restantes de S1 para S } S.addLast(S1.get(i)) i i + 1 fimenquanto enquanto j < S2.size() faça { copia os elementos restantes de S2 para S } S.addLast(S2.get(j)) j j +1 fimenquanto

Page 13: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Exercício

Dado o vetor com as chaves [9 25 10 18 5 7 15 3], aplicar o método MergeSort para ordená-lo crescentemente.

Page 14: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort: Análise de Desempenho (1/4)

Cenário do Melhor Caso ??? Cenário do Pior Caso ??? Cenário do Caso Médio ???

Page 15: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort: Melhor Caso (2/4)

Característica: nunca é necessário trocar após comparações.

Quando isto ocorre !?

Page 16: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort: Pior Caso (3/4)

Característica: sempre é necessário trocar após comparações.

Quando isso ocorre !?

Page 17: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

MergeSort: Caso Médio (4/4)

Característica: há necessidade de haver trocas após comparações.

Quando isso ocorre !?

Page 18: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Considerações Finais É possível implementar o Merge Sort utilizando

somente um vetor auxiliar ao longo de toda a execução, tornando assim a complexidade de espaço adicional igual a Θ(n).

É possível também implementar o algoritmo com espaço adicional Θ(1).

Algoritmo criado por Von Neumann.

Comprovado matematicamente que é praticamente impossível fazer um algoritmo mais eficiente.

Page 19: Classificação de dados por Intercalação: MergeSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com.

Site sobre ordenação

http://math.hws.edu/TMCM/java/xSortLab/ BubbleSort QuickSort SelectionSort InsertionSort (Busca Seqüencial) MergeSort