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

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

Mergesort Katia Guimarães. 2 Problema de Ordenação Dado um array com n números naturais, ordenar estes números em ordem crescente. INPUT: 95 48 70 86.

Apresentações semelhantes


Apresentação em tema: "Mergesort Katia Guimarães. 2 Problema de Ordenação Dado um array com n números naturais, ordenar estes números em ordem crescente. INPUT: 95 48 70 86."— Transcrição da apresentação:

1 Mergesort Katia Guimarães

2 2 Problema de Ordenação Dado um array com n números naturais, ordenar estes números em ordem crescente. INPUT: OUTPUT:

3 3 Abordagem Dividir-para-Conquistar 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.

4 4 Exemplo de Mergesort INPUT: Divide: Resolve Recursivamente: a) Primeira metade (Divide, Resolve recursivamente, Intercala Obtendo ) b) Segunda metade (Divide, Resolve recursivamente, Intercala Obtendo )

5 5 Exemplo de Mergesort INPUT: Resolve Recursivamente: a) (Retorna ) b) (Retorna ) 3. Intercala as soluções parciais:

6 6 Algoritmo Mergesort Entrada : (A, B, ini, fim) Saída : B [ ini.. fim], array A ordenado de ini até fim begin if (fim = ini) retorne(*); else MergeSort (A, B, ini, (ini + fim)/2 ); MergeSort (A, B, (ini + fim)/2 +1, fim); Intercala (A, B, ini, (fim+ini)/2 +1, (fim-ini+1) ); retorne(*); end (*) O array com a resposta depende do tamanho de A.

7 7 Algoritmo Intercala Entrada: (A, B, ini1, ini2, n) Saída: Elementos B[ini1.. ini1+n-1] ordenados begin int i  ini1, j  ini2, k  ini1; while ( i < ini2 and j < ini1+n ) do if (A[i]  A[j] ) then { B[k]  A[i]; i  i+1; k  k+1 } else { B[k]  A[j]; j  j+1; k  k+1 } while ( i < ini2 ) do /*copia 1a. metade.*/ { B[k]  A[i]; k  k+1; i  i+1 } while ( j < ini1+n ) do /*copia 2a. metade.*/ { B[k]  A[j]; k  k+1; j  j+1 } return ( B ) end

8 8 Exemplo de MergeSort

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

10 10 Implementação do Mergesort Podemos administrar este problema de duas maneiras: - Copiando a porção do array referente ao resultado de volta para o array A, ou - Utilizando uma chave para indicar a “direção” dos movimentos de Intercala.

11 11 Complexidade do Mergesort T Mergesort (n) = 2 T Mergesort (n/2) + cte n + cte Forma Fechada de Recorrência 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

12 12 Complexidade do Mergesort Temos que T MS (n) = 2 i T MS (n/2 i ) + i c n + (2 i -1) c. Note que sabemos o valor de T MS (1). Para obter um valor fechado, queremos que (n/2 i ) = 1. Isso ocorre quando i = log 2 n. T MS (n) = 2 log 2 n cte + (log 2 n) c n + (2 log 2 n - 1) c = n cte + c n log 2 n + c (n-1) = c nlog 2 n + (cte+c) n - c T MS (n) = O(n log 2 n)


Carregar ppt "Mergesort Katia Guimarães. 2 Problema de Ordenação Dado um array com n números naturais, ordenar estes números em ordem crescente. INPUT: 95 48 70 86."

Apresentações semelhantes


Anúncios Google