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

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

MergeSort Intercalação David Menotti Estruturas de Dados I DECOM – UFOP.

Apresentações semelhantes


Apresentação em tema: "MergeSort Intercalação David Menotti Estruturas de Dados I DECOM – UFOP."— Transcrição da apresentação:

1 MergeSort Intercalação David Menotti Estruturas de Dados I DECOM – UFOP

2 © David Menotti Estrutura de Dados I Dado um arranjo com n números naturais, ordenar estes números em ordem crescente. Entrada: Saída: Problema de Ordenação

3 © David Menotti Estrutura de Dados I Método em Computação que consiste em Dividir a entrada em conjuntos menores Resolver cada instância menor de maneira recursiva Reunir as soluções parciais para compor a solução do problema original. Abordagem Dividir-para-Conquistar

4 © David Menotti Estrutura de Dados I Métodos de ordenação de divisão por conquista SelectSort QuickSort (pior caso?) Divisão do problema de forma balanceada MergeSort Abordagem Balanceamento

5 © David Menotti Estrutura de Dados I Entrada: Divide: Resolve Recursivamente: 1. Primeira metade (Divide, Resolve recursivamente, Intercala Obtendo ) 2. Segunda metade (Divide, Resolve recursivamente, Intercala Obtendo ) Exemplo de MergeSort

6 © David Menotti Estrutura de Dados I Entrada: Resolve Recursivamente: 1. (Retorna ) 2. (Retorna ) 2. Intercala as soluções parciais: Exemplo de MergeSort

7 © David Menotti Estrutura de Dados I Algoritmo MergeSort void MergeSort(Item* A,int ini,int fim) { int meio; if (fim == ini) return; else { meio = ( ini + fim ) / 2; MergeSort(A, ini, meio ); MergeSort(A, meio+1, fim); Intercala(A, ini, meio, fim ); return; }

8 © David Menotti Estrutura de Dados I Implementação de Intercala IntercalaAB(Item* c,Item* a,int N,Item* b,int M) { int i, j, k; for (i = 0, j = 0, k = 0; k < N+M; k++) { if ( i == N ) { c[k] = b[j++]; continue; } if ( j == M ) { c[k] = a[i++]; continue; } if ( a[i] < b[j] ) c[k] = a[i++]; else c[k] = b[j++]; }

9 © David Menotti Estrutura de Dados I Exemplo de MergeSort

10 © David Menotti Estrutura de Dados I Implementação do MergeSort O procedimento Intercala requer o uso de um segundo arranjo, B, para receber os dados ordenados. Note que no retorno de Mergesort com um arranjo de tamanho 1, a resposta encontra-se no arranjo A (o arranjo original de entrada). No próximo nível (arranjo de comprimento 2) o resultado da intercalação estará no arranjo B. Podemos administrar este problema de duas maneiras.

11 © David Menotti Estrutura de Dados I Implementação do MergeSort Podemos administrar este problema de duas maneiras: Copiando a porção do arranjo referente ao resultado de volta para o arranjo A, ou Utilizando uma chave para indicar a direção dos movimentos de Intercala.

12 © David Menotti Estrutura de Dados I T MergeSt (n) = 2 T Mergesort (n/2) + cte n + cte Desenvolvendo T MS (n) = 2 T MS (n/2) + c n + c = 2 [ 2 T MS (n/4) + c n/2 + c ] + c n + c = 4 T MS (n/4) + 2c n + 3c = 4 [ 2 T MS (n/8) + c n/4 + c ] + 2c n + 3c = 8 T MS (n/8) + 3c n + 7c =... T MS (n) = 2 i T MS (n/2 i ) + i c n + (2 i -1) c Complexidade do MergeSort

13 © David Menotti Estrutura de Dados I Complexidade do MergeSort Temos que T MS (n) = 2 i T MS (n/2 i ) + i c n + (2 i -1) c. Tem-se que T MS (1) = 1 e (n/2 i ) = 1 (i = log 2 n). T MS (n) = 2 log2n cte + (log 2 n) c n + (2 log2n - 1) c = n cte + c n log 2 n + c (n-1) = c n log 2 n + (cte+c) n - c T MS (n) = O(n log 2 n)

14 © David Menotti Estrutura de Dados I MergeSort Vantagens Como HeapSort, MergeSort é O(n log n) Indicado para aplicações que exigem restrição de tempo (executa sempre em um determinado tempo para um dado n) Passível de ser transformado em estável Implementação de intercala Fácil Implementação Desvantagens Utiliza memória auxiliar – O(n) Na prática mais lento que HeapSort


Carregar ppt "MergeSort Intercalação David Menotti Estruturas de Dados I DECOM – UFOP."

Apresentações semelhantes


Anúncios Google