Você está na página 1de 69

Induo matemtica e recursividade

Tentativa-e-erro e diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

SCC-501 - Captulo 6
Paradigmas e Tcnicas de
Projetos de Algoritmos

Joo Lus Garcia Rosa1


1 Instituto
de Cincias Matemticas e de Computao
Universidade de So Paulo - So Carlos
http://www.icmc.usp.br/~joaoluis

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

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 2/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Sumrio

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 3/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Apresentao

O projeto de algoritmos requer abordagens adequadas:


A forma como um algoritmo aborda o problema pode levar
a um desempenho ineficiente,
Em certo casos, o algoritmo pode no conseguir resolver o
problema em tempo vivel.
Sero apresentados os principais paradigmas a serem
seguidos durante o projeto de algoritmos, os quais levam a
abordagens adequadas de projeto.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 4/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Apresentao

Paradigmas de Projeto de Algoritmos [6]:


induo,
recursividade,
algoritmos tentativa e erro,
diviso e conquista,
programao dinmica,
algoritmos gulosos,
algoritmos aproximados.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 5/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Apresentao

Induo matemtica e recursividade j foram estudados


no incio do curso, mas sero novamente considerados
como paradigmas de projeto de algoritmos,
Algoritmos tentativa-e-erro analisam todas as solues
possveis do problema, sem utilizar nenhum critrio para
evitar a anlise de certas solues baseadas em outras j
obtidas,
O algoritmo implementa a idia mais simples possvel para
se obter a soluo do problema,
Entretanto, essa abordagem na maioria das vezes
invivel.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 6/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Apresentao

Trs outras estratgias baseiam-se na idia de


decomposio de problemas complexos em outros mais
simples, cujas solues sero combinadas para fornecer
uma soluo para o problema original,
As estratgias diferem na maneira de proceder:
diviso e conquista costuma fornecer algoritmos
recursivos;
programao dinmica e
algoritmos gulosos costumam levar a algoritmos
iterativos.
Algoritmos aproximados tentam resolver o problema
quando a soluo considerada difcil (tempo
exponencial).

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 7/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Apresentao

Infelizmente, no existe um paradigma que seja o melhor


dentre todos!
Um problema pode ser resolvido de maneira mais eficiente
adotando-se determinado paradigma em detrimento de
outro,
Como ser visto, um paradigma pode levar a um algoritmo
O(2n ) e outro paradigma a um algoritmo O(n3 ), para a
resoluo de um mesmo problema.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 8/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

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?

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 9/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Sumrio

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 10/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Induo matemtica [6]

til para provar asseres sobre a correo e a


eficincia de algoritmos,
Consiste em inferir uma lei geral a partir de instncias
particulares,
Seja T um teorema que tenha como parmetro um
nmero natural n,
Para provar que T vlido para todos os valores de n,
prova-se que:
1 T vlido para n = 1;
2 Para todo n > 1, se T vlido para n 1, ento T vlido
para n.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 11/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Induo matemtica [6]

A condio 1 chamada de passo base,


Provar a condio 2 geralmente mais fcil que provar o
teorema diretamente (pode-se usar a assero de que T
vlido para n 1,
Esta afirmativa chamada de hiptese de induo ou
passo indutivo,
As condies 1 e 2 implicam T vlido para n = 2, o que
junto com a condio 2 implica T tambm vlido para
n = 3, e assim por diante.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 12/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Induo matemtica [6]

S(n) = 1 + 2 + + n = n(n + 1)/2:


Para n = 1 a assero verdadeira, pois
S(1) = 1 = 1 (1 + 1)/2 (passo base),
Assume-se que a soma dos primeiros n nmeros naturais
S(n) n(n + 1)/2 (hiptese de induo),
Pela definio de S(n) sabe-se que
S(n + 1) = S(n) + n + 1,
Usando a hiptese de induo,
S(n + 1) = n(n + 1)/2 + n + 1 = (n + 1)(n + 2)/2, que
exatamente o que se quer provar.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 13/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Limite Superior de Equaes de Recorrncia [6]


A soluo de uma equao de recorrncia pode ser difcil
de ser obtida,
Nestes casos, pode ser mais fcil tentar advinhar a
soluo ou obter um limite superior para a ordem de
complexidade,
Advinhar a soluo funciona bem quando se est
interessado apenas em um limite superior, ao invs da
soluo exata,
Mostrar que um certo limite existe mais fcil do que obter
o limite,
Ex.: T (2n) 2T (n) + 2n 1, T (2) = 1, definida para
valores de n que so potncias de 2:
O objetivo encontrar um limite superior na notao O,
onde o lado direito da desigualdade representa o pior caso.
Joo Lus G. Rosa
c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 14/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Induo Matemtica para Resolver Equao de Recorrncia [6]

T (2n) 2T (n) + 2n 1, T (2) = 1, definida para valores


de n que so potncias de 2:
Procura-se f (n) tal que T (n) = O(f (n)), mas fazendo com
que f (n) seja o mais prximo possvel da soluo real para
T (n),
Considera-se o palpite f (n) = n2 ,
Quer-se provar que T (n) = O(f (n)) utilizando induo
matemtica em n:
Passo base: T (2) = 1 f (2) = 4,
Passo de induo: provar que T (n) f (n) implica
T (2n) f (2n):
T (2n) 2T (n) + 2n 1, (def. da recorrncia)
2n2 + 2n 1, (hiptese de induo)
< (2n)2 ,
que exatamente o que se quer provar. Logo,
T (n) = O(n2 ).

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 15/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Induo Matemtica para Resolver Equao de Recorrncia [6]

Vai-se tentar um palpite menor, f (n) = cn, para alguma


constante c,
Provar que T (n) cn implica em T (2n) c2n. Assim:
T (2n) 2T (n) + 2n 1, (def. da recorrncia)
2cn + 2n 1, (hiptese de induo)
> c2n.

cn cresce mais lentamente que T (n), pois c2n = 2cn e


no existe espao para o valor 2n 1,
Logo, T (n) est entre cn e n2 .

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 16/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Induo Matemtica para Resolver Equao de Recorrncia [6]

Vai-se ento tentar f (n) = n log n:


Passo base: T (2) < 2 log 2,
Passo de induo: vai-se assumir que T (n) n log n.
Quer-se mostrar que T (2n) 2n log 2n. Assim:
T (2n) 2T (n) + 2n 1, (def. da recorrncia)
2n log n + 2n 1, (hiptese de induo)
< 2n log 2n,

A diferena entre as frmulas agora de apenas 1,


De fato, T (n) = n log n n + 1 a soluo exata de
T (n) = 2T (n/2) + n 1, T (1) = 0, que descreve o
comportamento do algoritmo de ordenao mergesort.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 17/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Sumrio

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 18/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Recursividade [6]

Um procedimento que chama a si mesmo, direta ou


indiretamente, dito ser recursivo,
Recursividade permite descrever algoritmos de forma mais
clara e concisa, especialmente problemas recursivos por
natureza ou que utilizam estruturas recursivas,

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 19/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Recursividade [6]

Ex.: rvore binria de pesquisa:


Todos os registros com chaves menores esto na
subrvore esquerda;
Todos os registros com chaves maiores esto na subrvore
direita.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 20/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Recursividade [6]

typedef long TipoChave;


typedef struct {
TipoChave Chave;
/* outros componentes */
} Registro;
typedef struct {
Registro Reg;
struct Nodo *Esq, *Dir;
} Nodo;

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 21/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Recursividade [6]

Algoritmo para percorrer todos os registros em ordem de


caminhamento central:
1 caminha na subrvore esquerda na ordem central;
2 visita a raiz;
3 caminha na subrvore direita na ordem central.
No caminhamento central, os vrtices so visitados em
ordem lexicogrfica das chaves.
void Central(Nodo *p)
{
if (p == NULL)
return;
Central(p -> Esq);
printf(%d\n, p -> Reg.Chave);
Central(p -> Dir);
}

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 22/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Implementao de Recursividade [6]

Usa-se uma pilha para armazenar os dados usados em


cada chamada de um procedimento que ainda no
terminou,
Todos os dados no globais vo para a pilha, registrando o
estado corrente da computao,
Quando uma ativao anterior prossegue, os dados da
pilha so recuperados,
No caso do caminhamento central:
para cada chamada recursiva, o valor de p e o endereo de
retorno da chamada recursiva so armazenados na pilha,
Quando encontra p = null o procedimento retorna para
quem chamou utilizando o endereo de retorno que est
no topo da pilha.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 23/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Problema de Terminao em Procedimentos Recursivos [6]

Procedimentos recursivos introduzem a possibilidade de


iteraes que podem no terminar: existe a necessidade
de considerar o problema de terminao,
fundamental que a chamada recursiva a um
procedimento P esteja sujeita a uma condio B, a qual se
torna no-satisfeita em algum momento da computao,
Esquema para procedimentos recursivos: composio C
de comandos Si e P:
P if B then C[Si , P].
Para demonstrar que uma repetio termina, define-se
uma funo f (x), sendo x o conjunto de variveis do
programa, tal que:
1 f (x) 0 implica na condio de terminao;
2 f (x) decrementada a cada iterao.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 24/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Problema de Terminao em Procedimentos Recursivos [6]

Uma forma simples de garantir terminao associar um


parmetro n para P (no caso por valor) e chamar P
recursivamente com n 1,
A substituio da condio B por n > 0 garante
terminao:
P if n > 0 then P[Si , P(n 1)].
necessrio mostrar que o nvel mais profundo de
recurso finito, e tambm possa ser mantido pequeno,
pois cada ativao recursiva usa uma parcela de memria
para acomodar as variveis.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 25/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Quando No Usar Recursividade [6]

Nem todo problema de natureza recursiva deve ser


resolvido com um algoritmo recursivo,
Estes podem ser caracterizados pelo esquema
P if B then (S, P),
Tais programas so facilmente transformveis em uma
verso no recursiva P (x := x0 ; while B do S).

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 26/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Exemplo de Quando No Usar Recursividade [6]

Clculo dos nmeros de Fibonacci:


f0 = 0, f1 = 1,
fn = fn1 + fn2 para n 2.

1+ 5
Soluo: fn = 15 [n ()n ], onde = 2 1, 618
a razo de ouro.
O procedimento recursivo obtido diretamente da equao
o seguinte:
int FibRec(int n)
{
if (n < 2)
return n;
else
return FibRec(n-1) + FibRec(n-2);
}

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 27/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Exemplos de Quando No Usar Recursividade [6]

Clculo dos nmeros de Fibonacci:


O programa extremamente ineficiente porque recalcula o
mesmo valor vrias vezes,
Neste caso, a complexidade de espao para calcular fn
O(n ),
Considerando que a medida de complexidade de tempo
f (n) o nmero de adies, e cada adio tem custo de
O(1), ento f (n) = O(n ).

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 28/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Verso Iterativa do Clculo de Fibonacci [6]

unsigned int FibIte (unsigned int n)


{
unsigned int i = 1, k, F = 0;
for (k = 1; k <= n; k++)
{
F += i;
i = F - i;
}
return F;
}

O programa tem complexidade de tempo O(n) e


complexidade de espao O(1),
Deve-se evitar uso de recursividade quando existe soluo
bvia por iterao.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 29/69
Induo matemtica e recursividade Apresentao
Tentativa-e-erro e diviso-e-conquista Induo Matemtica
Programao Dinmica, algoritmos gulosos e aproximados Recursividade

Clculo de Fibonacci [6]

Comparao verses recursiva e iterativa:

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

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 30/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Sumrio

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 31/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

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]!

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 32/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Algoritmos tentativa-e-erro [6]

Algoritmos tentativa e erro no seguem regra fixa de


computao:
Passos em direo soluo final so tentados e
registrados,
Caso esses passos tomados no levem soluo final,
eles podem ser retirados e apagados do registro.
Quando a pesquisa na rvore de solues cresce
rapidamente necessrio usar algoritmos aproximados ou
heursticas que no garantem a soluo tima mas so
rpidas.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 33/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Exemplo: passeio do cavalo [6]

Tabuleiro com n n posies: cavalo se movimenta


segundo regras do xadrez,
Problema: a partir de (x0 , y0 ), encontrar, se existir, um
passeio do cavalo que visita todos os pontos do tabuleiro
uma nica vez.
Tenta um prximo movimento:
void Tenta()
{ inicializa selecao de movimentos;
do
{ seleciona proximo candidato ao movimento;
if (aceitavel)
{ registra movimento;
if (tabuleiro nao esta cheio)
{ tenta novo movimento;
if (nao sucedido) apaga registro anterior;
}
}
} while (!((mov. bem sucedido) ou (acabaram-se cand. movimento))); }

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 34/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Exemplo: passeio do cavalo [6]


O tabuleiro pode ser representado por uma matriz n n,
A situao de cada posio pode ser representada por um
inteiro para recordar o histrico das ocupaes:
t[x, y ] = 0, campo < x, y > no visitado,
t[x, y ] = i, campo < x, y > visitado no i-simo movimento,
1 i n2 .
Regras do xadrez para os movimentos do cavalo:

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 35/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Exemplo: passeio do cavalo [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

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 36/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Algoritmos tentativa-e-erro

Exerccio:
Qual o menor caminho da cidade a at a c?

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 37/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

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

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 38/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Sumrio

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 39/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Algoritmos diviso-e-conquista

O paradigma diviso-e-conquista consiste em:


1 Dividir o problema a ser resolvido em subproblemas
menores e independentes;
2 Encontrar solues para as partes;
3 Combinar as solues obtidas em uma soluo global.
Os algoritmos utilizam recurso para dividir e combinar.
Processo recursivo :
dada uma entrada, se ela suficientemente simples,
obtm-se diretamente uma sada correspondente;
caso contrrio, ela decomposta em entradas mais
simples, para as quais se aplica o mesmo processo,
obtendo sadas correspondentes que so ento
combinadas em uma sada para a entrada original.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 40/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Algoritmos diviso-e-conquista [6]

Exemplo: encontrar o maior e o menor elemento de um


vetor de inteiros, A[1..n], n 1:
void MaxMin4 (int Linf, int Lsup, int *Max, int *Min)
{
int Max1, Max2, Min1, Min2, Meio;
if (Lsup - Linf <= 1)
{ if (A[Linf-1] < A[Lsup-1])
{ *Max = A[Lsup-1]; *Min = A[Linf-1]; }
else { *Max = A[Linf-1]; *Min = A[Lsup-1]; } }
else {
Meio = (Linf+Lsup)/2;
MaxMin4(Linf, Meio, &Max1, &Min1);
MaxMin4(Meio+1, Lsup, &Max2, &Min2);
if (Max1 > Max2) *Max = Max1; else *Max = Max2;
if (Min1 < Min2) *Min = Min1; else *Min = Min2; }
}

Cada chamada de MaxMin4 atribui Max e Min o maior e


o menor elemento em A[Linf ], A[Linf + 1], ..., A[Lsup].

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 41/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Diviso-e-conquista: anlise do exemplo [6]

Seja f (n) o nmero de comparaes entre os elementos


de A, se A contiver n elementos,

1 para n 2
f (n) =
f (bn/2c) + f (dn/2e) + 2 para n > 2

Quando n = 2i para algum inteiro positivo i:


f (n) = 2f (n/2) + 2
2f (n/2) = 4f (n/4) + 2 2
4f (n/4) = 8f (n/8) + 2 2 2
.. ..
. .
2i2 f (n/2i2 ) = 2i1 f (n/2i1 ) + 2i1

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 42/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Diviso-e-conquista: anlise do exemplo [6]

Adicionando lado a lado, obtm-se:


2i1 f (n/2i1 ) + ki1 k
P
f (n) = =1 2
= i1 i
2 f (2) + 2 2
= 2i1 + 2i 2
3n
= 2 2

Logo, f (n) = 3n/2 2 para o melhor caso, pior caso e


caso mdio (soluo tima).

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 43/69
Induo matemtica e recursividade
Algoritmos tentativa-e-erro (backtracking)
Tentativa-e-erro e diviso-e-conquista
Algoritmos diviso-e-conquista
Programao Dinmica, algoritmos gulosos e aproximados

Algoritmos diviso-e-conquista

Exemplos de algoritmos:
Busca binria;
SelectionSort, MergeSorte, Quicksort;
Maior elemento de uma sequncia;
Fibonacci recursivo.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 44/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

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 45/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

Quando um algoritmo recursivo tem complexidade


exponencial, a programao dinmica pode levar a um
algoritmo mais eficiente,
A tcnica de programao dinmica consiste em dividir o
problema original em subproblemas mais simples e
resolv-los, armazenando os resultados em uma tabela,
Isso feito iterativamente.
A ideia bsica da programao dinmica construir por
etapas uma resposta tima combinando respostas j
obtidas para partes menores,
Inicialmente, a entrada decomposta em partes mnimas,
para as quais so obtidas respostas.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 46/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

Em cada passo, sub-resultados so combinados


obtendo-se respostas para partes maiores, at que se
obtenha uma resposta para o problema original,
A decomposio feita uma nica vez e os casos
menores so tratados antes dos maiores,
Suas solues so armazenadas para serem usadas
quantas vezes for necessrio.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 47/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
Estrutura geral da programao dinmica [4]:

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 48/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

baseada no princpio da otimalidade:


Em uma sequncia tima de escolhas ou de decises,
cada subsequncia tambm deve ser tima:
Por exemplo: o menor caminho de So Carlos a So Paulo
passando por Campinas dado pelo menor caminho de
So Carlos a Campinas combinado com o menor caminho
de Campinas a So Paulo.
Reduz drasticamente o nmero total de verificaes pois
evita aquelas que sabidamente no podem ser timas:
A cada passo so eliminadas subsolues que certamente
no faro parte da soluo tima do problema.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 49/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

Exemplo: Qual a melhor maneira de se fazer o produto


entre n matrizes?
O produto de uma matriz p q por uma matriz q r requer
O(pqr ) operaes.
Considere o produto:
M = M1 [10, 20] M2 [20, 50] M3 [50, 1] M4 [1, 100]:
O produto na ordem M = M1 (M2 (M3 M4 )) requer
125.000 operaes;
O produto na ordem M = (M1 (M2 M3 )) M4 requer
2.200 operaes.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 50/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

Resolver esse problema por tentativa e erro, isto , testar


todas as ordens possveis de fazer o produto das matrizes
para se obter qual a melhor (f (n)), um processo
exponencial em n (f (n) 2n2 [1]).
Usando programao dinmica possvel obter um
algoritmo O(n3 )!

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 51/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
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.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 53/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

Os valores mij so calculados na ordem crescente das


diferenas nos subscritos,
O clculo inicia com mii para todo i, depois mi,i+1 para
todo i, depois mi,i+2 , ...
Assim, esse mtodo chamado ascendente, ao contrrio
dos mtodos recursivos, que so chamados
descendentes.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 54/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

Hierarquia de instncias na programao dinmica [4]:

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 55/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

Exemplo: Tabela de dados calculados pela programao


dinmica para o produto:
M = M1 [10, 20] M2 [20, 50] M3 [50, 1] M4 [1, 100]
m11 = 0 m12 = 10.000 m13 = 1.200 m14 = 2.200
m22 = 0 m23 = 1.000 m24 = 3.000
m33 = 0 m34 = 5.000
m44 = 0

Exerccio: Escrever um algoritmo para achar o produto de


menor custo entre n matrizes, usando programao
dinmica.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 56/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
#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

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 58/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados

Algoritmos gulosos

So tipicamente usados para resolver problemas de


otimizao,
Por exemplo, o algoritmo para encontrar o caminho mais
curto entre duas cidades:
Um algoritmo guloso escolhe a estrada que parece mais
promissora no instante atual e nunca muda essa deciso,
independentemente do que possa acontecer depois.
A cada iterao:
seleciona um elemento conforme uma funo gulosa,
marca-o para no consider-lo novamente nos prximos
estgios,
atualiza a entrada,
examina o elemento selecionado quanto sua viabilidade,
decide a sua participao ou no na soluo.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 59/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados

Algoritmos gulosos

Algoritmo guloso genrico:


C: conjunto de candidatos;
S: conjunto soluo.

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

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 60/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados

Caractersticas dos Algoritmos Gulosos [6]


Para construir a soluo tima existe um conjunto ou lista
de candidatos,
So acumulados um conjunto de candidatos considerados
e escolhidos, e o outro de candidatos considerados e
rejeitados,
Existe uma funo que verifica se um conjunto particular
de candidatos produz uma soluo (sem considerar
otimalidade no momento),
Outra funo verifica se um conjunto de candidatos
vivel (tambm sem se preocupar com a otimalidade),
Uma funo de seleo indica a qualquer momento quais
dos candidatos restantes o mais promissor,
Uma funo objetivo fornece o valor da soluo
encontrada, como o comprimento do caminho construdo
(no aparece de forma explcita no algoritmo guloso).
Joo Lus G. Rosa
c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 61/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados

Caractersticas da Implementao de Algoritmos Gulosos [6]

Quando funciona corretamente, a primeira soluo


encontrada sempre tima,
A funo de seleo geralmente relacionada com a
funo objetivo,
Se o objetivo :
maximizar provavelmente escolher o candidato
restante que proporcione o maior ganho individual,
minimizar ento ser escolhido o candidato restante de
menor custo.
O algoritmo nunca muda de ideia:
Uma vez que um candidato escolhido e adicionado
soluo ele l permanece para sempre,
Uma vez que um candidato excludo do conjunto soluo,
ele nunca mais reconsiderado.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 62/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados

Algoritmos gulosos

Exerccio:
Calcule o menor caminho da cidade a at a c, utilizando
um algoritmo guloso.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 63/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

1 Induo matemtica e recursividade


Apresentao
Induo Matemtica
Recursividade
2 Tentativa-e-erro e diviso-e-conquista
Algoritmos tentativa-e-erro (backtracking)
Algoritmos diviso-e-conquista
3 Programao Dinmica, algoritmos gulosos e aproximados
Programao Dinmica
Algoritmos gulosos
Algoritmos aproximados

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 64/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados

Algoritmos Aproximados [6]

Problemas que somente possuem algoritmos


exponenciais para resolv-los so considerados difceis,
Problemas considerados intratveis ou difceis so muito
comuns,
Exemplo: problema do caixeiro viajante cuja complexidade
de tempo O(n!).
Diante de um problema difcil comum remover a
exigncia de que o algoritmo tenha sempre que obter a
soluo tima.
Neste caso procura-se por algoritmos eficientes que no
garantem obter a soluo tima, mas uma que seja a mais
prxima possvel da soluo tima.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 65/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados

Algoritmos Aproximados [6]

Heurstica: um algoritmo que pode produzir um bom


resultado, ou at mesmo obter a soluo tima, mas pode
tambm no produzir soluo alguma ou uma soluo que
est distante da soluo tima.
Algoritmo aproximado: um algoritmo que gera solues
aproximadas dentro de um limite para a razo entre a
soluo tima e a produzida pelo algoritmo aproximado
(comportamento monitorado sob o ponto de vista da
qualidade dos resultados).

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 66/69
Induo matemtica e recursividade Programao Dinmica
Tentativa-e-erro e diviso-e-conquista Algoritmos gulosos
Programao Dinmica, algoritmos gulosos e aproximados Algoritmos aproximados

O Problema da Mochila

Lembra do problema da mochila?


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?
Qual paradigma utilizar para desenvolver um algoritmo
que resolva esse problema?

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 67/69
Apndice Bibliografia

Bibliografia I

[1] Aho, A. V., Hopcroft. J. E., Ullman, J. D.


The Design and Analysis of Computer Algorithms.
Addison-Wesley, 1974.
[2] Cormen, T. H., Leiserson, C. E., Rivest, R. L., Stein, C.
Algoritmos - Teoria e Prtica.
Ed. Campus, Rio de Janeiro, Segunda Edio, 2002.
[3] Horowitz, E., Sahni, S. Rajasekaran, S.
Computer Algorithms.
Computer Science Press, 1998.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 68/69
Apndice Bibliografia

Bibliografia II

[4] Munari Junior, Pedro Augusto


Paradigmas e Tcnicas de Projeto de Algoritmos.
SCE-181 Introduo Cincia da Computao II.
Slides. Cincia de Computao. ICMC/USP, 2007.
[5] Toscani, Laira Vieira; Veloso, Paulo A. S.
Complexidade de algoritmos.
Sries livros didticos, no. 13. 2002.
[6] Ziviani, Nivio
Projeto de Algoritmos - com implementaes em Java e
C++.
Thomson, 2007.

Joo Lus G. Rosa


c 2011 - SCC-501: VI. Paradigmas e Tcnicas de Projetos de Algoritmos 69/69

Você também pode gostar