Você está na página 1de 6

Agenda

Conceitos Bsicos Conceitos Bsicos Template Genrico Template Genrico Exemplos Exemplos

Anlise e Tcnicas de Algoritmos


Jorge Figueiredo

Diviso e Conquista Diviso e Conquista

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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.

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Quando Utilizar DeC?


Existem trs condies que indicam que a estratgia de diviso e Existem trs condies que indicam que a estratgia de diviso e conquista pode ser utilizada com sucesso: conquista pode ser utilizada com sucesso: 1. Deve ser possvel decompor uma instncia em sub1. Deve ser possvel decompor uma instncia em subinstncias. instncias. 2. A combinao dos resultados deve ser eficiente. 2. A combinao dos resultados deve ser eficiente. 3. As sub-instncias devem ser mais ou menos do mesmo 3. As sub-instncias devem ser mais ou menos do mesmo tamanho. tamanho.

Quando Utilizar DeC?


possvel identificar pelo menos duas situaes genricas em possvel identificar pelo menos duas situaes genricas em que a abordagem por diviso e conquista adequada: que a abordagem por diviso e conquista adequada: 1. Problemas onde um grupo de operaes so 1. Problemas onde um grupo de operaes so correlacionadas ou repetidas. A multiplicao de matrizes, correlacionadas ou repetidas. A multiplicao de matrizes, que veremos a seguir, um exemplo clssico. que veremos a seguir, um exemplo clssico. 2. Problemas em que uma deciso deve ser tomada e, uma 2. Problemas em que uma deciso deve ser tomada e, uma vez tomada, quebra o problema em peas disjuntas. Em vez tomada, quebra o problema em peas disjuntas. Em especial, a abordagem por diviso-e-conquiasta especial, a abordagem por diviso-e-conquiasta interessante quando algumas peas passam a ser interessante quando algumas peas passam a ser irrelevantes. irrelevantes.

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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 Ingnua Pow(a, n) pa for i 2 to n do ppa return p

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Multiplicao de Inteiros Grandes


O problema consiste em multiplicar dois nmeros inteiros O problema consiste em multiplicar dois nmeros inteiros grandes. grandes. A multiplicao clssica (a que aprendemos fazer na escola) A multiplicao clssica (a que aprendemos fazer na escola) requer tempo (n22). Isso porque fazemos multiplicao dgito requer tempo (n ). Isso porque fazemos multiplicao dgito a dgito. a dgito. Soluo Alternativa por Diviso e Conquista Soluo Alternativa por Diviso e Conquista Para evitar maiores complicaes, vamos assumir que o Para evitar maiores complicaes, vamos assumir que o nmero de dgitos em cada nmero potncia de 2. nmero de dgitos em cada nmero potncia de 2. A multiplicao de um nmero A por um nmero B pode ser A multiplicao de um nmero A por um nmero B pode ser efetuada dividindo-se o nmero original em dois super-dgitos efetuada dividindo-se o nmero original em dois super-dgitos e procedendo a multiplicao .. e procedendo a multiplicao
Anlise e Tcnicas de Algoritmos 2005.1 Jorge Figueiredo, DSC/UFCG

Multiplicao de Inteiros Grandes


n n/2 A: B:
w y wz wy xy

n/2
x z xz

wy

wz + xy

xz

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Multiplicao de Inteiros Grandes


Mult(A,B) = Mult(w,y).102m + (Mult(w,z)+Mult(x,y)).10m + Mult(x,z) Mult(A,B) = Mult(w,y).102m + (Mult(w,z)+Mult(x,y)).10m + Mult(x,z) A multiplicao por 10m pode ser vista como o deslocamento A multiplicao por 10m pode ser vista como o deslocamento de m posies para a direita. de m posies para a direita. As adies envolvidas tomam tempo (n) cada. As adies envolvidas tomam tempo (n) cada. A multiplicao de dois inteiros longos o resultado de 4 A multiplicao de dois inteiros longos o resultado de 4 produtos de inteiros de tamanho metade do valor original, e produtos de inteiros de tamanho metade do valor original, e um constante nmero de adies e deslocamentos, com um constante nmero de adies e deslocamentos, com tempo (n). tempo (n).

Multiplicao de Inteiros Grandes


Uma soluo por diviso e conquista: Uma soluo por diviso e conquista: 1. Diviso: Dividir cada nmero em dois nmeros com 1. Diviso: Dividir cada nmero em dois nmeros com metade da quantidade de dgitos. metade da quantidade de dgitos. 2. Conquista: Proceder a multiplicao das quatro partes. 2. Conquista: Proceder a multiplicao das quatro partes. 3. Combinao: Combinar os resultados com deslocamento 3. Combinao: Combinar os resultados com deslocamento e adies. e adies. A anlise do algoritmo que utiliza diviso e conquista requer a A anlise do algoritmo que utiliza diviso e conquista requer a soluo da seguinte relao de recorrncia: soluo da seguinte relao de recorrncia: T(n) = 4.T(n/2) + (n) T(n) = 4.T(n/2) + (n) (n22) (n )

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Multiplicao de Inteiros Grandes


Uma Soluo por Diviso e Conquista Mais Eficiente Uma Soluo por Diviso e Conquista Mais Eficiente Por que no temos a eficincia desejada? Ora, temos 4 Por que no temos a eficincia desejada? Ora, temos 4 multiplicas de nmeros de tamanho n/2. multiplicas de nmeros de tamanho n/2. A soluo seria reduzir o nmero de multiplicaes? Isso A soluo seria reduzir o nmero de multiplicaes? Isso verdade pois sabemos que a adio e deslocamentos verdade pois sabemos que a adio e deslocamentos contribui com (n). contribui com (n). Se observarmos mais detalhadamente, podemos reduzir Se observarmos mais detalhadamente, podemos reduzir para trs o nmero de multiplicaes: para trs o nmero de multiplicaes: C= wy C= wy D= xz D= xz E= (wz + xy) E= (wz + xy)

Multiplicao de Inteiros Grandes


C= Mult(w,y) C= Mult(w,y) D= Mult(x,z) D= Mult(x,z) E= Mult((w+x, y+z)) C D = (wy+wz+xy+xz)-wy-xz=(wz + xy) E= Mult((w+x, y+z)) C D = (wy+wz+xy+xz)-wy-xz=(wz + xy) Logo, Mult(A,B) = C.102m + E.10m + D Logo, Mult(A,B) = C.102m + E.10m + D

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

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 C12 = P3 + P5 C21 = P2 + P4 C22 = P1 + P3 - P2 + P6

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

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Menor Distncia Entre Pontos


Distncia Euclideana Distncia Euclideana

Menor Distncia Entre Pontos


Closest Pair Entrada: Um conjunto de pontos n P = <p1, p2, ..., pn, em duas dimenses. Sada: O par de pontos p1 e p2 que apresenta a menor distncia euclideana.

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

Menor Distncia Entre Pontos

Anlise e Tcnicas de Algoritmos 2005.1

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.

Menor Distncia Entre Pontos 2D


Como dividir em sub-problemas? Como dividir em sub-problemas? Ordenar de acordo com a coordenada x e dividir em duas Ordenar de acordo com a coordenada x e dividir em duas partes: esquerda e direita. partes: esquerda e direita.

Como resolver este problema considerando 1D? Como resolver este problema considerando 1D? possvel aplicar Diviso e Conquista? possvel aplicar Diviso e Conquista?

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Menor Distncia Entre Pontos 2D


Resolver recursivamente cada sub-problema, obtendo dl le dr.r. Resolver recursivamente cada sub-problema, obtendo d e d O que podemos observar? O que podemos observar? J temos a menor distncia em cada uma das partes. J temos a menor distncia em cada uma das partes. Fazer d= min{dl l,,dr}. Fazer d= min{d dr}. Falta analisar distncia entre pontos de sub-problemas Falta analisar distncia entre pontos de sub-problemas distintos. distintos. Devemos analisar todos os casos? Devemos analisar todos os casos? Somente pontos que se encontram em uma faixa de Somente pontos que se encontram em uma faixa de tamanho 2d em torno da linha divisria. tamanho 2d em torno da linha divisria.

Menor Distncia Entre Pontos 2D

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

Jorge Figueiredo, DSC/UFCG

Menor Distncia Entre Pontos 2D


Qual a quantidade de pontos que se encontram dentro da Qual a quantidade de pontos que se encontram dentro da faixa de tamanho 2d? faixa de tamanho 2d? Se considerarmos um p Pl,,todos os pontos de Prr que Se considerarmos um p Pl todos os pontos de P que devem ser considerados devem estar em um retngulo R devem ser considerados devem estar em um retngulo R de dimenses d 2d. de dimenses d 2d.

Menor Distncia Entre Pontos 2D


Como determinar os seis pontos? Como determinar os seis pontos? Projeo de pontos nos eixos x e y. Projeo de pontos nos eixos x e y. Pode-se fazer isso para todo p Pl l e Prr, em O(n) (pontos Pode-se fazer isso para todo p P e P, em O(n) (pontos ordenados). ordenados). Relao de recorrncia T(n)= 2.T(n/2) + O(n) Relao de recorrncia T(n)= 2.T(n/2) + O(n) Sabemos que isso O(n.log n) Sabemos que isso O(n.log n)

d R d
Anlise e Tcnicas de Algoritmos 2005.1

d R d
Jorge Figueiredo, DSC/UFCG Jorge Figueiredo, DSC/UFCG

Anlise e Tcnicas de Algoritmos 2005.1

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

Você também pode gostar