A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Classificação de dados por Intercalação: MergeSort"— Transcrição da apresentação:

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

2 Principais Métodos Classificação por Trocas Classificação por Seleção
Classificação por Inserção Classificação por Intercalação

3 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.

4 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.

5 Exemplo Divisão e Conquista (MergeSort)
(b) Fase de Conquista (a) Fase de Divisão

6 Exemplo do Processo MergeSort

7 MergeSort: Junção ou Merge
Utiliza um vetor temporário (Vtemp) para manter o resultado da ordenação dos 2 sub-vetores.

8 MergeSort: Junção ou Merge
Após a ordenação, o conteúdo de Vtemp é transferido para o vetor.

9 MergeSort: Junção ou Merge
Número de operações críticas ?

10 MergeSort: Junção ou Merge

11 Visão Geral do Processo MergeSort

12 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)) enquanto j < S2.size() faça { copia os elementos restantes de S2 para S } S.addLast(S2.get(j)) j  j +1

13 Exercício Dado o vetor com as chaves [ ], aplicar o método MergeSort para ordená-lo crescentemente.

14 MergeSort: Análise de Desempenho (1/4)
Cenário do Melhor Caso ??? Cenário do Pior Caso ??? Cenário do Caso Médio ???

15 MergeSort: Melhor Caso (2/4)
Característica: nunca é necessário trocar após comparações. Quando isto ocorre !?

16 MergeSort: Pior Caso (3/4)
Característica: sempre é necessário trocar após comparações. Quando isso ocorre !?

17 MergeSort: Caso Médio (4/4)
Característica: há necessidade de haver trocas após comparações. Quando isso ocorre !?

18 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.

19 Site sobre ordenação BubbleSort QuickSort SelectionSort
BubbleSort QuickSort SelectionSort InsertionSort (Busca Seqüencial) MergeSort


Carregar ppt "Classificação de dados por Intercalação: MergeSort"

Apresentações semelhantes


Anúncios Google