Escolar Documentos
Profissional Documentos
Cultura Documentos
Tentativa-e-erro e diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados
SCC-501 - Captulo 6
Paradigmas e Tcnicas de
Projetos de Algoritmos
2011
Joo Lus G. Rosa
c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 1/69
Induo matemtica e recursividade
Tentativa-e-erro e diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados
Sumrio
Sumrio
Apresentao
Apresentao
Apresentao
Apresentao
Apresentao
Apresentao
Por exemplo:
Como ordenar um vetor de inteiros?
Como realizar o produto entre n matrizes de modo que o
nmero de operaes seja o menor possvel?
Problema da mochila:
Considere n itens a serem levados para uma viagem, dentro
de uma mochila de capacidade L que no pode comportar
todos os itens,
Cada item tem um peso wi e uma utilidade ci . Quais itens
escolher, que modo que a utilidade total dos itens levados
seja a maior possvel?
Sumrio
Sumrio
Recursividade [6]
Recursividade [6]
Recursividade [6]
Recursividade [6]
n 10 20 30 50 100
Recursiva 8 ms 1s 2 min 21 dias 109 anos
Iterativa 1/6 ms 1/3 ms 1/2 ms 3/4 ms 1,5 ms
Sumrio
Algoritmos tentativa-e-erro
Um algoritmo tentativa-e-erro aquele que testa
exaustivamente todas as solues possveis de um
problema, de modo a obter a desejada,
As solues so testadas indiscriminadamente:
No utiliza critrios para eliminar outras solues que no
podero ser melhores que a obtida no estgio considerado.
As solues so enumeradas de modo semelhante ao
percurso em uma rvore que possua todas as solues,
Muitas vezes a rvore de solues cresce
exponencialmente [6]!
1 60 39 34 31 18 9 64
38 35 32 61 10 63 30 17
59 2 37 40 33 28 19 8
36 49 42 27 62 11 16 29
43 58 3 50 41 24 7 20
48 51 46 55 26 21 12 15
57 44 53 4 23 14 25 6
52 47 56 45 54 5 22 13
Algoritmos tentativa-e-erro
Exerccio:
Qual o menor caminho da cidade a at a c?
Algoritmos tentativa-e-erro
Exerccio:
TODOS os caminhos so enumerados:
a b c: 21
a b d c: 32
a b f d c: 51
Sumrio
Algoritmos diviso-e-conquista
Algoritmos diviso-e-conquista
Exemplos de algoritmos:
Busca binria;
SelectionSort, MergeSorte, Quicksort;
Maior elemento de uma sequncia;
Fibonacci recursivo.
Sumrio
Programao Dinmica
Programao Dinmica
Programao Dinmica
Estrutura geral da programao dinmica [4]:
Programao Dinmica
Programao Dinmica
Programao Dinmica
Programao Dinmica
Seja mij o menor custo para calcular o produto
Mi Mi+1 ... Mj para 1 i j n,
Assim,
0 se i = j
mij =
Minik j (mik + mk +1,j + bi1 bk bj ) se j > i
onde:
o termo mik representa o custo mnimo para calcular
M 0 = Mi Mi+1 ... Mk ,
o segundo termo mk +i,j representa o custo mnimo para
calcular M 00 = Mk +1 Mk +2 ... Mj ,
o terceiro termo, bi1 bk bj , representa o custo de multiplicar
M 0 [bi1 , bk ] por M 00 [bk , bj ],
bi1 bi so as dimenses da matriz Mi ,
a equao acima diz que mij , j > i, representa o custo
mnimo de todos os valores possveis de k entre i e j 1, da
soma dos trs termos.
Joo Lus G. Rosa
c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 52/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados
Programao Dinmica
Seja mij o menor custo para calcular o produto
Mi Mi+1 ... Mj para 1 i j n,
Assim,
0 se i = j
mij =
Minik j (mik + mk +1,j + bi1 bk bj ) se j > i
Minik j
| {z }
principio da otimalidade
Em uma sequncia tima de escolhas ou de decises,
cada subsequncia tambm deve ser tima.
Programao Dinmica
Programao Dinmica
Programao Dinmica
Programao Dinmica
#define Maxn 10
int main(int argc, char *argv[])
{
int i, j, k, h, n, temp;
int b[Maxn+1];
int m[Maxn][Maxn];
printf(Numero de matrizes n: );
scanf(%d, &n);
getchar();
printf(Dimensoes das matrizes: );
for (i = 0; i <= n; i++)
scanf(%d, &b[i]);
for (i = 0; i < n; i++)
m[i][i] = 0;
for (h = 1; h <= n-1; h++) {
for (i = 1; i <= n-h; i++) {
j = i+h;
m[i-1][j-1] = INT_MAX;
for (k = i; k <= j-1; k++)
{
temp = m[i-1][k-1] + m[k][j-1] + b[i-1] * b[k] * b[j];
if (temp < m[i-1][j-1])
m[i-1][j-1] = temp;
}
printf(m[%d][%d] = %d\n, i-1, j-1, m[i-1][j-1]);
}
putchar(\n);
}
return 0;
}
Joo Lus G. Rosa
c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 57/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados
Sumrio
Algoritmos gulosos
Algoritmos gulosos
S=
Enquanto (C 6= ) e (S no tem soluo)
x = seleciona(C)
C = C {x}
Se (S + {x} vivel) ento S = S + {x}
Se (S tem soluo) ento retorna S
Seno no existe soluo
Algoritmos gulosos
Exerccio:
Calcule o menor caminho da cidade a at a c, utilizando
um algoritmo guloso.
Sumrio
O Problema da Mochila
Bibliografia I
Bibliografia II