Escolar Documentos
Profissional Documentos
Cultura Documentos
Conceitos Bsicos Conceitos Bsicos Template Genrico Template Genrico Exemplos Exemplos
Motivao
Pegar um problema de entrada grande. Pegar um problema de entrada grande. Quebrar a entrada em pedaos menores (DIVISO). Quebrar a entrada em pedaos menores (DIVISO). Resolver cada pedao separadamente. (CONQUISTA) Resolver cada pedao separadamente. (CONQUISTA) Como resolver os pedaos? Como resolver os pedaos? Combinar os resultados. Combinar os resultados. 72 diviso diviso 72 1 combina combina 1 72 1 72 5 1 1 5 1
MergeSort
5 47 5 5 47 72 5 9 47 47 47 34 20 10 9 9 10 9 9 10
34 20 10 34 20 20 34 9
10 20 34
10 20 34 47 72
A Tcnica
A tcnica de diviso e conquista consistem de 3 passos bsicos: A tcnica de diviso e conquista consistem de 3 passos bsicos: 1. Diviso: Dividir o problema original, em subproblemas 1. Diviso: Dividir o problema original, em subproblemas menores. menores. 2. Conquista: Resolver cada subproblema recursivamente. 2. Conquista: Resolver cada subproblema recursivamente. 3. Combinao: Combinar as solues encontradas, compondo 3. Combinao: Combinar as solues encontradas, compondo uma soluo para o problema original. uma soluo para o problema original.
A Tcnica
Algoritmos baseados em diviso e conquista so, em geral, Algoritmos baseados em diviso e conquista so, em geral, recursivos. recursivos. A maioria dos algoritmos de diviso e conquista divide o A maioria dos algoritmos de diviso e conquista divide o problema em a subproblemas da mesma natureza, de problema em a subproblemas da mesma natureza, de tamanho n/b. tamanho n/b. T(n) = a. T(n/b) + g(n) T(n) = a. T(n/b) + g(n) Teorema Master para fazer anlise. Teorema Master para fazer anlise. Vantagens: Vantagens: Requer um nmero menor de acessos memria. Requer um nmero menor de acessos memria. So altamente paralelizveis. Se existem vrios So altamente paralelizveis. Se existem vrios processadores disponveis, a estratgia propicia eficincia. processadores disponveis, a estratgia propicia eficincia.
Algoritmo Genrico
DivisoeConquista(x) if x pequeno ou simples do return resolver(x) else decompor x em conjuntos menores x0, x1, xn for i 0 to n do yi DivisoeConquista(xi) i i +1 combinar yis return y
Exemplo 1
O problema consiste em encontrar o maior elemento de um array A[1..n] O problema consiste em encontrar o maior elemento de um array A[1..n]
Soluo Ingnua Maxim(A[1..n]) max A[1] for i 2 to n do if A[j] > max then max A[i] return max
Exemplo 1
O problema consiste em encontrar o maior elemento de um array A[1..n] O problema consiste em encontrar o maior elemento de um array A[1..n]
Exemplo 2
O problema consiste em computa ann,em que n N. O problema consiste em computa a , em que n N.
Soluo Ingnua Maxim(A[1..n]) maior A[1] for i 2 to n do if A[j] > maior then maior A[i] return maior
Soluo DeC Maxim(A[x..y]) if x y 1 then return max(A[x], A[y]) else m x+y/2 v1 Maxim(A[x..m]) v2 Maxim(A[m+1..y]) return max(v1, v2)
Soluo DeC Pow(a, n) if n=0 then return 1 if n par then return Pow(a, n/2) Pow(a, n/2) else return Pow(a,n-1/2) Pow(a, n-1/2) a
Jorge Figueiredo, DSC/UFCG
n/2
x z xz
wy
wz + xy
xz
No total, fazemos 3 multiplicaes, 4 adies e 2 subtraes No total, fazemos 3 multiplicaes, 4 adies e 2 subtraes de nmeros com n/2 dgitos. necessrio ainda fazer de nmeros com n/2 dgitos. necessrio ainda fazer deslocamentos mas, tudo isso representa (n). deslocamentos mas, tudo isso representa (n). T(n) = 3.T(n/2) + (n) T(n) = 3.T(n/2) + (n) T(n) (n1.585)) T(n) (n1.585
Multiplicao de Matrizes
Objetivo multiplicar duas matrizes nn. Objetivo multiplicar duas matrizes nn. Por exemplo, no caso de n=2, necessrio efetuar 8 Por exemplo, no caso de n=2, necessrio efetuar 8 8 multiplicaes. (2xx, em que x = log228) multiplicaes. (2 , em que x = log )
Algoritmo de Strassen
Strassen mostrou que um multiplicao de matrizes 2x2 pode Strassen mostrou que um multiplicao de matrizes 2x2 pode ser feita com 7 multiplicaes e 18 operaes de adio e ser feita com 7 multiplicaes e 18 operaes de adio e 7 subtrao.(2log227 =22.807)) subtrao.(2log =22.807 Reduo feita usando diviso e conquista. Reduo feita usando diviso e conquista.
C11 = a11b11 + a12b21 C12 = a11b12 + a12b22 C21 = a21b11 + a22b21 C22 = a21b12 + a22b22
Anlise e Tcnicas de Algoritmos 2005.1 Jorge Figueiredo, DSC/UFCG
A
A0 A2 A1 A3
B0 B2
B
B1 B3
= =
A0B0+A1B2 A2B0+A3B2
R
A0B1+A1B3 A2B1+A3B3
Algoritmo de Strassen
Algoritmo de Strassen
P1 = (A11+ A22)(B11+B22) P2 = (A21 + A22) * B11 P3 = A11 * (B12 - B22) P4 = A22 * (B21 - B11) P5 = (A11 + A12) * B22 P6 = (A21 - A11) * (B11 + B12) P7 = (A12 - A22) * (B21 + B22)
C11 = P1 + P4 - P5 + P7 = (A11+ A22)(B11+B22) + A22 * (B21 - B11) - (A11 + A12) * B22+ (A12 - A22) * (B21 + B22) = A11 B11 + A11 B22 + A22 B11 + A22 B22 + A22 B21 A22 B11 A11 B22 -A12 B22 + A12 B21 + A12 B22 A22 B21 A22 B22 = A11 B11 + A12 B21
y1 y2
(x1 , y1 )
( x2 , y 2 )
x1 x2
=
(x1 , y1 ) (x2 , y2 )
Anlise e Tcnicas de Algoritmos 2005.1
(x1 x2 )2 + ( y1 y2 )2
Jorge Figueiredo, DSC/UFCG Anlise e Tcnicas de Algoritmos 2005.1 Jorge Figueiredo, DSC/UFCG
Menor Distncia Entre Pontos Soluo Fora Bruta O(n22). Soluo Fora Bruta O(n ). Vamos assumir: Vamos assumir:
No existem pontos com a mesma coordenada x. No existem pontos com a mesma coordenada x. No existem pontos com a mesma coordenada y. No existem pontos com a mesma coordenada y.
Como resolver este problema considerando 1D? Como resolver este problema considerando 1D? possvel aplicar Diviso e Conquista? possvel aplicar Diviso e Conquista?
d R d
Anlise e Tcnicas de Algoritmos 2005.1
d R d
Jorge Figueiredo, DSC/UFCG Jorge Figueiredo, DSC/UFCG
ClosestPair(P)
Pr-processamento Construir Px e Py como listas ordenadas pelas coordenadas x e y Diviso Quebrar P em Pl e Pr Conquista dl = ClosestPair(Pl) dr = ClossetPair(Pr) Combinao d= min{dl, dr} Determinar faixa divisria e pontos Verificar se tem algum par com distncia < d
Anlise e Tcnicas de Algoritmos 2005.1 Jorge Figueiredo, DSC/UFCG