CI165 — Analise de Algoritmos Recursivos´ · Exemplo de divisao-e-conquista:˜ Mergesort...
Transcript of CI165 — Analise de Algoritmos Recursivos´ · Exemplo de divisao-e-conquista:˜ Mergesort...
CI165 — Analise de Algoritmos Recursivos
Andre Vignatti
Andre Vignatti CI165
Ordenacao por intercalacao
Q que significa intercalar dois (sub)vetores ordenados?
Problema: Dados A[p . . . q] e A[q+1 . . . r ] crescentes,rearranjar A[p . . . r ] de modo que ele fique em ordem crescente.
Entrada:p q r
A 22 33 55 77 99 11 44 66 88
Saıda:p q r
A 11 22 33 44 55 66 77 88 99
Andre Vignatti CI165
Intercalacao
p q rA 22 33 55 77 99 11 44 66 88
B
Andre Vignatti CI165
Intercalacao
kA
i jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
kA 11
i jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
kA 11 22
i jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
kA 11 22 33
i jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
kA 11 22 33 44
i jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
kA 11 22 33 44 55
i jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
kA 11 22 33 44 55 66
i jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
kA 11 22 33 44 55 66 77
i jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
kA 11 22 33 44 55 66 77 88
i = jB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
A 11 22 33 44 55 66 77 88 99
j iB 22 33 55 77 99 88 66 44 11
Andre Vignatti CI165
Intercalacao
Pseudo-codigo
INTERCALA(A,p,q, r)1 para i ← p ate q faca2 B[i]← A[i]3 para j ← q + 1 ate r faca4 B[r + q + 1− j]← A[j]5 i ← p6 j ← r7 para k ← p ate r faca8 se B[i] ≤ B[j]9 entao A[k ]← B[i]
10 i ← i + 111 senao A[k ]← B[j]12 j ← j − 1
Andre Vignatti CI165
Complexidade de Intercala
Entrada:p q r
A 22 33 55 77 99 11 44 66 88
Saıda:p q r
A 11 22 33 44 55 66 77 88 99
Tamanho da entrada: n = r − p + 1
Consumo de tempo: Θ(n)
Andre Vignatti CI165
Algoritmos recursivos
“To understand recursion, we must first 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 algoritmorecursivo?
O que e uma relacao de recorrencia?
O que significa resolver uma relacao de recorrencia?
Andre Vignatti CI165
Recursao e o paradigma de divisao-e-conquista
Um algoritmo recursivo resolve o problema chamando a simesmo para resolver instancias menores do mesmoproblema.
Algoritmos de divisao-e-conquista possuem tres etapasem cada nıvel de recursao:
1 Divisao: a instancia do problema e dividida em instanciasde tamanho menor, gerando subproblemas.
2 Conquista: cada subproblema e resolvido recursivamente.3 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 de ordenacao e um exemploclassico do uso da tecnica de divisao-e-conquista. (tomerge = intercalar)
Descricao do Mergesort em alto nıvel:1 Divisao: divida o vetor com n elementos em dois
subvetores de tamanho bn/2c e dn/2e2 Conquista: ordene os dois subvetores recursivamente
usando o Mergesort
3 Combinacao: intercale os dois subvetores para obter umvetor ordenado usando o algoritmo Intercala
Andre Vignatti CI165
Mergesort
p q rA 66 33 55 44 99 11 77 22 88
Andre Vignatti CI165
Mergesort
p q rA 66 33 55 44 99 11 77 22 88
p q rA 66 33 55 44 99
Andre Vignatti CI165
Mergesort
p q rA 66 33 55 44 99 11 77 22 88
p q rA 66 33 55 44 99
p q rA 66 33 55
Andre Vignatti CI165
Mergesort
p q rA 66 33 55 44 99 11 77 22 88
p q rA 66 33 55 44 99
p q rA 66 33 55
p rA 66 33
Andre Vignatti CI165
Mergesort
p q rA 66 33 55 44 99 11 77 22 88
p q rA 66 33 55 44 99
p q rA 66 33 55
p rA 66 33
p = rA 66
Andre Vignatti CI165
Mergesort
p q rA 66 33 55 44 99 11 77 22 88
p q rA 66 33 55 44 99
p q rA 66 33 55
p rA 66 33
Andre Vignatti CI165
Mergesort
p q rA 66 33 55 44 99 11 77 22 88
p q rA 66 33 55 44 99
p q rA 66 33 55
p rA 66 33
p = rA 33
Andre Vignatti CI165
Mergesort
p q rA 66 33 55 44 99 11 77 22 88
p q rA 66 33 55 44 99
p q rA 66 33 55
p rA 66 33
Andre Vignatti CI165
Mergesort
p q rA 33 66 55 44 99 11 77 22 88
p q rA 33 66 55 44 99
p q rA 33 66 55
p rA 33 66
Andre Vignatti CI165
Mergesort
p q rA 33 66 55 44 99 11 77 22 88
p q rA 33 66 55 44 99
p q rA 33 66 55
Andre Vignatti CI165
Mergesort
p q rA 33 66 55 44 99 11 77 22 88
p q rA 33 66 55 44 99
p q rA 33 66 55
p = rA 55
Andre Vignatti CI165
Mergesort
p q rA 33 66 55 44 99 11 77 22 88
p q rA 33 66 55 44 99
p q rA 33 66 55
Andre Vignatti CI165
Mergesort
p q rA 33 55 66 44 99 11 77 22 88
p q rA 33 55 66 44 99
p q rA 33 55 66
Andre Vignatti CI165
Mergesort
p q rA 33 55 66 44 99 11 77 22 88
p q rA 33 55 66 44 99
Andre Vignatti CI165
Mergesort
p q rA 33 55 66 44 99 11 77 22 88
p q rA 33 55 66 44 99
p rA 44 99
Andre Vignatti CI165
Mergesort
p q rA 33 55 66 44 99 11 77 22 88
p q rA 33 55 66 44 99
p rA 44 99
p = rA 44
Andre Vignatti CI165
Mergesort
p q rA 33 55 66 44 99 11 77 22 88
p q rA 33 55 66 44 99
p rA 44 99
Andre Vignatti CI165
Mergesort
p q rA 33 55 66 44 99 11 77 22 88
p q rA 33 55 66 44 99
p rA 44 99
p = rA 99
Andre Vignatti CI165
Mergesort
p q rA 33 55 66 44 99 11 77 22 88
p q rA 33 55 66 44 99
p rA 44 99
Andre Vignatti CI165
Mergesort
p q rA 33 55 66 44 99 11 77 22 88
p q rA 33 55 66 44 99
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p q rA 33 44 55 66 99
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 11 77
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 11 77
p = rA 11
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 11 77
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 11 77
p = rA 77
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 11 77
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 22 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 22 88
p = rA 22
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 22 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 22 88
p = rA 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
p rA 22 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 77 22 88
p rA 11 77 22 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 22 77 88
p rA 11 22 77 88
Andre Vignatti CI165
Mergesort
p q rA 33 44 55 66 99 11 22 77 88
Andre Vignatti CI165
Mergesort
p q rA 11 22 33 44 55 66 77 88 99
Andre Vignatti CI165
Mergesort
p q rA 11 22 33 44 55 66 77 88 99
Andre Vignatti CI165
Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p ≤ r , emordem crescente.
MERGESORT(A,p, r)1 se p < r2 entao q ← b(p + r)/2c3 MERGESORT(A,p,q)4 MERGESORT(A,q + 1, r)5 INTERCALA(A,p,q, r)
p q rA 66 33 55 44 99 11 77 22 88
Andre Vignatti CI165
Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p ≤ r , emordem crescente.
MERGESORT(A,p, r)1 se p < r2 entao q ← b(p + r)/2c3 MERGESORT(A,p,q)4 MERGESORT(A,q + 1, r)5 INTERCALA(A,p,q, r)
p q rA 33 44 55 66 99 11 77 22 88
Andre Vignatti CI165
Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p ≤ r , emordem crescente.
MERGESORT(A,p, r)1 se p < r2 entao q ← b(p + r)/2c3 MERGESORT(A,p,q)4 MERGESORT(A,q + 1, r)5 INTERCALA(A,p,q, r)
p q rA 33 44 55 66 99 11 22 77 88
Andre Vignatti CI165
Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p ≤ r , emordem crescente.
MERGESORT(A,p, r)1 se p < r2 entao q ← b(p + r)/2c3 MERGESORT(A,p,q)4 MERGESORT(A,q + 1, r)5 INTERCALA(A,p,q, r)
p q rA 11 22 33 44 55 66 77 88 99
Andre Vignatti CI165
Complexidade do Mergesort
MERGESORT(A,p, r)1 se p < r2 entao q ← b(p + r)/2c3 MERGESORT(A,p,q)4 MERGESORT(A,q + 1, r)5 INTERCALA(A,p,q, r)
Qual e a complexidade de MERGESORT?
Seja T (n) := o consumo de tempo maximo (pior caso) emfuncao de n = r − p + 1
Andre Vignatti CI165
Complexidade do Mergesort
MERGESORT(A,p, r)1 se p < r2 entao q ← b(p + r)/2c3 MERGESORT(A,p,q)4 MERGESORT(A,q + 1, r)5 INTERCALA(A,p,q, r)
linha consumo de tempo
1 ?2 ?3 ?4 ?5 ?
T (n) =?
Andre Vignatti CI165
Complexidade do Mergesort
MERGESORT(A,p, r)1 se p < r2 entao q ← b(p + r)/2c3 MERGESORT(A,p,q)4 MERGESORT(A,q + 1, r)5 INTERCALA(A,p,q, r)
linha consumo de tempo
1 Θ(1)2 Θ(1)3 T (dn/2e)4 T (bn/2c)5 Θ(n)
T (n) = T (dn/2e) + T (bn/2c) + Θ(n) + Θ(2)
Andre Vignatti CI165
Complexidade do MergesortObtemos uma relacao de recorrencia (i.e., uma funcao definida emtermos de si mesma).
T (1) = Θ(1)
T (n) = T (dn/2e) + T (bn/2c) + Θ(n) para n = 2,3,4, . . .
Algoritmo Recursivo⇒ Relacao de Recorrencia
Em geral, algoritmos recursivos levam a complexidade T (n) que euma relacao de recorrencia.
E necessario entao resolver a recorrencia!
Ou seja, obter uma “formula nao-recursiva” (ou “formulafechada”) para T (n).
No caso, T (n) = Θ(n lg n). Assim, o consumo de tempo doMergesort e Θ(n lg n) (no pior ou melhor caso?).
Veremos em breve como resolver recorrencias...Andre Vignatti CI165