Buscar

Divisão e Conquista

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Análise de Algoritmos
DIVISÃO E CONQUISTADIVISÃO E CONQUISTA
Bacharelado em Ciência da Computação
Flávia Coelho
flaviacoelho@ufersa.edu.br
Atualizado em Setembro de 2016
 
Motivação
● Considerar um problema de entrada grande
● Quebrar a entrada em pedaços menores → 
DIVISÃO
● Resolver cada pedaço separadamente → 
CONQUISTA
● Combinar os resultados em uma solução 
global
Obtem soluções eficientes para resolver
problemas nos quais os subproblemas
são versões menores do problema 
original
 
Exemplo
Merge Sort
 
Passos Fundamentais
DIVIDIR O PROBLEMA ORIGINAL
EM SUBPROBLEMAS MENORES
RESOLVER CADA SUBPROBLEMA
COMBINAR AS SOLUÇÕES ENCONTRADAS,
COMPONDO UMA SOLUÇÃO PARA O 
PROBLEMA ORIGINAL
 
Algoritmo DeC Genérico
divisãoeConquista(x){
  se x é pequeno ou simples faça
    retorne resolver(x)
  casocontrário{
    decompor x em conjuntos menores x0, x1, …, xn
    para i   0 a n ← faça
      yi   divisãoeConquista(x← i)
    combinar yi’s
    retorna y
  }
}
 
Exemplo
Encontrar o maior elemento do array A[1..n]
maximo (A[1..n]){
max   A[1]←
  for i   2 ← to n do
if(A[i] > max) then max   A[i]←
     return max
}
 
Exemplo
Encontrar o maior elemento do array A[1..n]
maximoDeC(A[x..y]){
if (x – y) <= 1 then 
return max (A[x], A[y])
else{
          m   (x + y)/2←
          v1   maximo(A[x..m])←
          v2   maximo(A[m+1..y]) ←
} 
return max (v1, v2)
}
 
Exemplo
Potência - Computar an, onde n  N 
pow(a, n){
p   a←
  for i   2 ← to n do
p   p * a←
return p
}
 
Exemplo
Potência - Computar an, onde n  N 
powDeC(a, n){
if n = 0 then 
return 1
if n é par then
y = powDeC(a,n/2)
return y * y
else 
y = powDeC(a,(n­1)/2)
return a*y*y
}
 
Técnica Genérica de Análise da 
Complexidade Computacional
● Algoritmos baseados em divisão-e-
conquista são recursivos
● A maioria dos algoritmos divide o 
problema em a subproblemas da 
mesma natureza, de tamanho n/b
● T(n) = aT(n/b) + f(n) 
● Vantagens
● São altamente paralelizáveis
 
Exemplo
Análise da Complexidade Computacional
maximoDeC(A[x..y]){
if (x – y) <= 1 then 
return max (A[x], A[y])
else{
          m   (x + y)/2←
          v1   maximo(A[x..m])←
          v2   maximo(A[m+1..y]) ←
} 
return max (v1, v2)
}
 
Exemplo
Análise da Complexidade Computacional
powDeC(a, n){
if n = 0 then 
return 1
if n é par then
y = powDeC(a,n/2)
return y * y
else 
y = powDeC(a,(n­1)/2)
return a*y*y
}
 
Quando Utilizar Divisão e 
Conquista?
● Três condições devem ser satisfeitas
● Deve ser possível decompor uma 
instância em sub-instâncias
● A combinação dos resultados deve ser 
eficiente
● As sub-instâncias devem ser mais ou 
menos do mesmo tamanho
 
Leitura Recomendada
N. Ziviani. Projeto de Algoritmos com 
Implementações em Java e C++. 
Thompson Learning, 2007
 
Referências
Material didático elaborado por Jorge Cesar 
Abrantes de Figueiredo, UFCG 
(Universidade Federal de Campina 
Grande)
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15

Continue navegando