Mergesort Katia Guimarães.

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

Python: Recursão Claudio Esperança.
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Programação em Java Prof. Maurício Braga
Complexidade de Algoritmos Recursivos
Analise de Algoritmos e Notação Assintótica
Katia S. Guimarães QUICKSORT Katia S. Guimarães
Pesquisa de Informação
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Aula 10 Algoritmos de Busca
Algoritmos de Ordenação
Algoritmos de Ordenação
Interação entre objetos
Análise Projeto de Algoritmos
Adaptado de material da profa. Maria Aparecida Livi
Algoritmos Distribuídos Professora: Lúcia Drummond
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.

Coleta de resíduos. Sumário Resíduos Coleta de resíduos Contador de referências Marcação e varredura Parada e cópia Marcação e compactação Gerenciamento.
Geometria Computacional Fecho Convexo
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Medida do Tempo de Execução de um Programa
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
Classificação e Pesquisa de Dados
Métodos de Classificação por Seleção: HeapSort
Método de Ordenação: InsertionSort
Classificação de dados por Intercalação: MergeSort
Métodos de Classificação por Seleção
Dividir-e-Conquistar
Apresentação da linguagem Python
Divisão e Conquista Análise de algoritmos UNISUL Ciência da Computação
Programação Dinámica Análise de algoritmos UNISUL
Robson Godoi / Sandra Siebra
Paradigmas de programação
Algoritmos de Ordenação 4
Algoritmos de Busca Parte II
Compressão de Textos Juliano Palmieri Lage.
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Aula 14.
Abordagens para problemas NP-completos
Katia S. Guimarães Heapsort Katia S. Guimarães
Estruturas de Dados Aula 14: Recursão 04/06/2014.
Ceça Moraes – Introdução à Programação SI1
Máquina de Turing Universal
QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual.
Construção e Análise de Algoritmos
Aula 10 Algoritmos de Busca
Computação Eletrônica
Complexidade em Tempo de um Algoritmo
Como analisar um algoritmo
DCC 001 Programação de Computadores 2º Semestre de 2011
Recursividade Profs. De Prog2 e Lab2.
Alinhamento de Cadeias de DNA COMPARAÇÃO DE SEQÜÊNCIAS
Geometria Computacional Fecho Convexo
Analise de Algoritmos e Notação Assintótica
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Alinhamento Global de Seqüências Katia Guimarães.
Métodos de Ordenação Externa
Ordenação Professor Paulo Gomide 27 de outubro de 2015.
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
Abordagens para Problemas Intratáveis Katia S. Guimarães
Recursividade e análise Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Mergesort Katia Guimarães

Problema de Ordenação Dado um array com n números naturais, ordenar estes números em ordem crescente. INPUT: 95 48 70 86 21 37 OUTPUT: 21 37 48 70 86 95

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.

Exemplo de Mergesort INPUT: 47 26 33 05 99 38 64 15 1. Divide: 47 26 33 05 99 38 64 15 2. Resolve Recursivamente: a) Primeira metade 47 26 33 05 (Divide, Resolve recursivamente, Intercala Obtendo 05 26 33 47 ) b) Segunda metade 99 38 64 15 Obtendo 15 38 64 99 )

Exemplo de Mergesort INPUT: 47 26 33 05 99 38 64 15 2. Resolve Recursivamente: a) (Retorna 05 26 33 47 ) b) (Retorna 15 38 64 99 ) 3. Intercala as soluções parciais: 05 15 26 33 38 47 64 99

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) ); end (*) O array com a resposta depende do tamanho de A.

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

Exemplo de MergeSort

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.

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.

Complexidade do Mergesort TMergesort(n) = 2 • TMergesort(n/2) + cte • n + cte Forma Fechada de Recorrência TMS (n) = 2 • TMS(n/2) + c • n + c = 2 •[ 2 • TMS(n/4) + c • n/2 + c ] + c • n + c = 4 • TMS(n/4) + 2c • n + 3c = 4 •[ 2 • TMS(n/8) + c • n/4 + c ] + 2c • n + 3c = 8 • TMS(n/8) + 3c • n + 7c = ... TMS (n) = 2i • TMS(n/2i) + i • c • n + (2i-1) • c

Complexidade do Mergesort Temos que TMS(n) = 2i • TMS(n/2i) + i • c • n + (2i-1) • c. Note que sabemos o valor de TMS(1). Para obter um valor fechado, queremos que (n/2i) = 1. Isso ocorre quando i = log2n. TMS(n) = 2log2n • cte + (log2n) • c • n + (2log2n - 1) • c = n • cte + c • n • log2n + c •(n-1) = c • nlog2n + (cte+c) • n - c TMS(n) = O(n • log2n)