Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouPedro Isabella Alterado mais de 10 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.