Você está na página 1de 68

CI165 MergeSort e Analise de Algoritmos Recursivos

Andre Vignatti

19 de setembro de 2011

Andre Vignatti

CI165

Ordenacao por intercalacao


Q que signica intercalar dois (sub)vetores ordenados? Problema: Dados A[p . . . q] e A[q+1 . . . r ] crescentes, rearranjar A[p . . . r ] de modo que ele que em ordem crescente. Entrada: A Sada: A p q r 11 22 33 44 55 66 77 88 99 p q r 22 33 55 77 99 11 44 66 88

Andre Vignatti

CI165

Intercalacao

p q r 22 33 55 77 99 11 44 66 88

Andre Vignatti

CI165

Intercalacao

k A i j 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao

k A 11 i j 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao

k A 11 22 i j 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao

k A 11 22 33 i j 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao

k A 11 22 33 44 i j 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao

k A 11 22 33 44 55 i j 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao

k A 11 22 33 44 55 66 i j 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao

k A 11 22 33 44 55 66 77 i j 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao

k A 11 22 33 44 55 66 77 88 i =j 99 88 66 44 11

22 33 55 77

Andre Vignatti

CI165

Intercalacao

11 22 33 44 55 66 77 88 99 j i 22 33 55 77 99 88 66 44 11

Andre Vignatti

CI165

Intercalacao
Pseudo-codigo I NTERCALA(A, p, q, r ) 1 para i p ate q faca 2 B[i] A[i] 3 para j q + 1 ate r faca 4 B[r + q + 1 j] A[j] 5 i p 6 j r 7 para k p ate r faca 8 se B[i] B[j] 9 entao A[k] B[i] 10 i i +1 11 senao A[k ] B[j] 12 j j 1
Andre Vignatti CI165

Complexidade de Intercala

Entrada: A Sada: A p q r 11 22 33 44 55 66 77 88 99 p q r 22 33 55 77 99 11 44 66 88

Tamanho da entrada: n = r p + 1 Consumo de tempo: (n)

Andre Vignatti

CI165

Corretude de Intercala
Invariante principal de Intercala: No comeco de cada iteracao do laco das linhas 712, vale que:
1 2

A[p . . . k 1] esta ordenado, A[p . . . k 1] contem todos os elementos de B[p . . . i 1] e de B[j + 1 . . . r ], B[i] A[k 1] e B[j] A[k 1].

Exerccio. Prove que a armacao acima e de fato um invariante de I NTERCALA. Exerccio. (facil) Mostre usando o invariante acima que I NTERCALA e correto.

Andre Vignatti

CI165

Algoritmos recursivos

To understand recursion, we must rst understand recursion.


(anonimo)

O que e o paradigma de divisao-e-conquista? Como mostrar a corretude de um algoritmo recursivo? Como analisar o consumo de tempo de um algoritmo recursivo? O que e uma formula de recorrencia? O que signica resolver uma formula de recorrencia?

Andre Vignatti

CI165

Recursao e o paradigma de divisao-e-conquista


Um algoritmo recursivo encontra a sada para uma instancia de entrada de um problema chamando a si mesmo para resolver instancias menores deste mesmo problema. Algoritmos de divisao-e-conquista possuem tres etapas em cada nvel de recursao:
1

Divisao: o problema e dividido em subproblemas semelhantes ao problema original, porem tendo como entrada instancias de tamanho menor. Conquista: cada subproblema e resolvido recursivamente a menos que o tamanho de sua entrada seja sucientemente pequeno, quando este e resolvido diretamente. Combinacao: as solucoes dos subproblemas sao combinadas para obter uma solucao do problema original.

Andre Vignatti

CI165

Exemplo de divisao-e-conquista: Mergesort

Mergesort e um algoritmo para resolver o problema de ordenacao e um exemplo classico do uso do paradigma de divisao-e-conquista. (to merge = intercalar) Descricao do Mergesort em alto nvel:
1

Divisao: divida o vetor com n elementos em dois subvetores de tamanho n/2 e n/2 , respectivamente. Conquista: ordene os dois vetores recursivamente usando o Mergesort; Combinacao: intercale os dois subvetores para obter um vetor ordenado usando o algoritmo Intercala.

Andre Vignatti

CI165

Mergesort

p q r 66 33 55 44 99 11 77 22 88

Andre Vignatti

CI165

Mergesort

p q r 66 33 55 44 99 11 77 22 88 p q r 66 33 55 44 99

Andre Vignatti

CI165

Mergesort

p q r 66 33 55 44 99 11 77 22 88 p q r 66 33 55 44 99 p q r 66 33 55

Andre Vignatti

CI165

Mergesort
p q r 66 33 55 44 99 11 77 22 88 p q r 66 33 55 44 99 p q r 66 33 55 p r 66 33

Andre Vignatti

CI165

Mergesort
A p q r 66 33 55 44 99 11 77 22 88 p q r 66 33 55 44 99 p q r 66 33 55 p r 66 33 p=r 66

Andre Vignatti

CI165

Mergesort
p q r 66 33 55 44 99 11 77 22 88 p q r 66 33 55 44 99 p q r 66 33 55 p r 66 33

Andre Vignatti

CI165

Mergesort
A p q r 66 33 55 44 99 11 77 22 88 p q r 66 33 55 44 99 p q r 66 33 55 p r 66 33 p=r 33

Andre Vignatti

CI165

Mergesort
p q r 66 33 55 44 99 11 77 22 88 p q r 66 33 55 44 99 p q r 66 33 55 p r 66 33

Andre Vignatti

CI165

Mergesort
p q r 33 66 55 44 99 11 77 22 88 p q r 33 66 55 44 99 p q r 33 66 55 p r 33 66

Andre Vignatti

CI165

Mergesort

p q r 33 66 55 44 99 11 77 22 88 p q r 33 66 55 44 99 p q r 33 66 55

Andre Vignatti

CI165

Mergesort
p q r 33 66 55 44 99 11 77 22 88 p q r 33 66 55 44 99 p q r 33 66 55 p=r 55

Andre Vignatti

CI165

Mergesort

p q r 33 66 55 44 99 11 77 22 88 p q r 33 66 55 44 99 p q r 33 66 55

Andre Vignatti

CI165

Mergesort

p q r 33 55 66 44 99 11 77 22 88 p q r 33 55 66 44 99 p q r 33 55 66

Andre Vignatti

CI165

Mergesort

p q r 33 55 66 44 99 11 77 22 88 p q r 33 55 66 44 99

Andre Vignatti

CI165

Mergesort

p q r 33 55 66 44 99 11 77 22 88 p q r 33 55 66 44 99 p r 44 99

Andre Vignatti

CI165

Mergesort
p q r 33 55 66 44 99 11 77 22 88 p q r 33 55 66 44 99 p r 44 99 p=r 44

Andre Vignatti

CI165

Mergesort

p q r 33 55 66 44 99 11 77 22 88 p q r 33 55 66 44 99 p r 44 99

Andre Vignatti

CI165

Mergesort
p q r 33 55 66 44 99 11 77 22 88 p q r 33 55 66 44 99 p r 44 99 p=r 99

Andre Vignatti

CI165

Mergesort

p q r 33 55 66 44 99 11 77 22 88 p q r 33 55 66 44 99 p r 44 99

Andre Vignatti

CI165

Mergesort

p q r 33 55 66 44 99 11 77 22 88 p q r 33 55 66 44 99

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p q r 33 44 55 66 99

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 11 77

Andre Vignatti

CI165

Mergesort
p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 11 77 p=r 11

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 11 77

Andre Vignatti

CI165

Mergesort
p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 11 77 p=r 77

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 11 77

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 22 88

Andre Vignatti

CI165

Mergesort
p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 22 88 p=r 22

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 22 88

Andre Vignatti

CI165

Mergesort
p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 22 88 p=r 88

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88 p r 22 88

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 77 22 88 p r 11 77 22 88

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 22 77 88 p r 11 22 77 88

Andre Vignatti

CI165

Mergesort

p q r 33 44 55 66 99 11 22 77 88

Andre Vignatti

CI165

Mergesort

p q r 11 22 33 44 55 66 77 88 99

Andre Vignatti

CI165

Mergesort

p q r 11 22 33 44 55 66 77 88 99

Andre Vignatti

CI165

Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p r , em ordem crescente.

M ERGESORT(A, p, r ) 1 se p < r 2 entao q (p + r )/2 3 M ERGESORT(A, p, q) 4 M ERGESORT(A, q + 1, r ) 5 I NTERCALA(A, p, q, r )

p q r 66 33 55 44 99 11 77 22 88

Andre Vignatti

CI165

Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p r , em ordem crescente.

M ERGESORT(A, p, r ) 1 se p < r 2 entao q (p + r )/2 3 M ERGESORT(A, p, q) 4 M ERGESORT(A, q + 1, r ) 5 I NTERCALA(A, p, q, r )

p q r 33 44 55 66 99 11 77 22 88

Andre Vignatti

CI165

Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p r , em ordem crescente.

M ERGESORT(A, p, r ) 1 se p < r 2 entao q (p + r )/2 3 M ERGESORT(A, p, q) 4 M ERGESORT(A, q + 1, r ) 5 I NTERCALA(A, p, q, r )

p q r 33 44 55 66 99 11 22 77 88

Andre Vignatti

CI165

Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p r , em ordem crescente.

M ERGESORT(A, p, r ) 1 se p < r 2 entao q (p + r )/2 3 M ERGESORT(A, p, q) 4 M ERGESORT(A, q + 1, r ) 5 I NTERCALA(A, p, q, r )

p q r 11 22 33 44 55 66 77 88 99

Andre Vignatti

CI165

Corretude do Mergesort

M ERGESORT(A, p, r ) 1 se p < r 2 entao q (p + r )/2 3 M ERGESORT(A, p, q) 4 M ERGESORT(A, q + 1, r ) 5 I NTERCALA(A, p, q, r )

O algoritmo esta correto? A corretude do algoritmo Mergesort apoia-se na corretude do algoritmo Intercala e segue facilmente por inducao em n := r p + 1. Voce consegue ver por que?
Andre Vignatti CI165

Corretude do Mergesort

Base: Mergesort ordena vetores de tamanho 0 ou 1. Hipotese de inducao: Mergesort ordena vetores com < n elementos. Passo de inducao: por hipotese de inducao, Mergesort ordena os dois subvetores (de tamanho n/2 e n/2 ). Pela corretude de Intercala, segue que o vetor resultante da intercalacao e um vetor ordenado de n elementos.

Andre Vignatti

CI165

Complexidade do Mergesort

M ERGESORT(A, p, r ) 1 se p < r 2 entao q (p + r )/2 3 M ERGESORT(A, p, q) 4 M ERGESORT(A, q + 1, r ) 5 I NTERCALA(A, p, q, r ) Qual e a complexidade de M ERGESORT? Seja T (n) := o consumo de tempo maximo (pior caso) em funcao de n = r p + 1

Andre Vignatti

CI165

Complexidade do Mergesort
M ERGESORT(A, p, r ) 1 se p < r 2 entao q (p + r )/2 3 M ERGESORT(A, p, q) 4 M ERGESORT(A, q + 1, r ) 5 I NTERCALA(A, p, q, r ) linha 1 2 3 4 5 consumo de tempo ? ? ? ? ? T (n) =?
Andre Vignatti CI165

Complexidade do Mergesort
M ERGESORT(A, p, r ) 1 se p < r 2 entao q (p + r )/2 3 M ERGESORT(A, p, q) 4 M ERGESORT(A, q + 1, r ) 5 I NTERCALA(A, p, q, r ) linha 1 2 3 4 5 consumo de tempo (1) (1) T ( n/2 ) T ( n/2 ) (n)

T (n) = T ( n/2 ) + T ( n/2 ) + (n) + (2)


Andre Vignatti CI165

Complexidade do Mergesort
Obtemos o que chamamos de formula de recorrencia (i.e., uma formula denida em termos de si mesma). T (1) = (1) T (n) = T ( n/2 ) + T ( n/2 ) + (n) para n = 2, 3, 4, . . . Em geral, ao aplicar o paradigma de divisao-e-conquista, chega-se a um algoritmo recursivo cuja complexidade T (n) e uma formula de recorrencia. necessario entao resolver a recorrencia! Mas, o que E signica resolver uma recorrencia? Signica encontrar uma formula fechada para T (n). No caso, T (n) = (n lg n). Assim, o consumo de tempo do Mergesort e (n lg n) no pior caso. Veremos mais tarde como resolver recorrencias.
Andre Vignatti CI165

Você também pode gostar