Você está na página 1de 113

Diviso e conquista

Programao dinmica
Algoritmos gulosos
Tcnicas de programao
Diviso e Conquista
Historicamente, o termo diviso e conquista foi originado
pelos generais napolenicos (1800 at 1814) que aplicava
uma estratgia de dividir o exrcito inimigo em vrios sub-
exrcitos separados, para poder vencer cada uma das
partes facilmente. O mtodo de desenvolvimento de
algoritmos por diviso e conquista reflete esta estratgia
militar.

Muitos algoritmos teis so recursivos em sua estrutura:
para resolver um dado problema, eles chamam assim
mesmos recursivamente uma ou mais vezes para lidar
com subproblemas intimamente relacionados. Em geral,
esses algoritmos seguem uma abordagem de dividir e
conquistar: eles desmembram o problema em vrios
subproblemas que so semelhantes ao problema original,
mas menores em tamanho, resolvem os subproblemas
recursivamente e depois combinam essas solues com o
objetivo de criar uma soluo para o problema original.
Diviso e Conquista
Dada uma instncia de tamanho n de um
problema o mtodo da diviso e conquista divide-
a em k substncias disjuntas (1 k = n) que
correspondem a k subproblemas distintos e
independentes. Estes subproblemas ao resolvidos
separadamente e ento acha-se uma forma de
combinar as solues parciais para se obter a
soluo do problema original. Se os k
subproblemas gerados no passo anterior so
ainda relativamente grandes deve-se aplicar o
mtodo da diviso e conquista sucessivas vezes
at que o tamanho do subproblema gerado seja
to pequeno que sua soluo possa ser obtida de
forma trivial.
Diviso e Conquista
A descrio do mtodo sugere imediatamente o
uso de uma estrutura recursiva para sua
implementao.
O mtodo de diviso e conquista
implementado em algoritmos que utilizem a
metodologia Top Down, onde a gerao dos
subproblemas feita de cima para baixo.


Diviso e Conquista
O paradigma de dividir e conquistar envolve trs
passos em cada nvel de recurso:
1) Dividir o problema em um determinado
nmero de subproblemas.
2) Conquistar os subproblemas, resolvendo-os
recursivamente. Porm, se os tamanhos dos
subproblemas forem pequenos o bastante,
basta resolver os subproblemas de maneira
direta.
3) Combinar as solues dadas aos
subproblemas, afim de formar a soluo para o
problema original.
Problema: Multiplicao de Inteiros
grandes
1.234.567.890 =
1x10
9
+2x10
8
+3x10
7
+4x10
6
+5x10
5
+ 6x10
4
+7x10
3
+8x10
2
+
9x10
1
+0x10
0
na base x
1x
9
+2x
8
+3x
7
+4x
6
+5x
5
+ 6x
4
+7x
3
+8x
2
+ 9x
1
+0x
0


p . q ... fora bruta
Representao vetorial
1x
9
+2x
8
+3x
7
+4x
6
+5x
5
+ 6x
4
+7x
3
+8x
2
+ 9x
1
+0x
0
( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) x ( 9, 3, 7, 4, 9, 2) = p . q = r
for (i = 0; i< n+m-1; i++) r[i] = 0;
for (i = 0; i< n; i++)
for (j = 0; j< m; j++) r[i+j] = r[i+j] + p[i]*q[j];
faltou o vai 1 !
p . q ...dividir-e-conquistar
p x q = (0, 1, 2, 3, 4, 5, 6, 7) x ( 9, 3, 7, 4, 9, 2) = r
p x q = (p
e
+p
d
x
4
) . (q
e
+q
d
.x
4
)
p x q = p
e
.q
e
+ (p
e
.q
d
+p
d
.q
e
).x
4
+ p
d
.q
d
.x
8

p x q = r
e
+ r
c
.x
4
+ r
d
.x
8
r
e
= p
e
.q
e
; r
d
= p
d
.q
d
; r
AUX
= (p
e
+p
d
). (q
e
+q
d
)
r
c
= r
AUX
- r
e
- r
d
trocar .s por +s !!!!

p
e

p
d

q
e
q
d

p . q ...dividir-e-conquistar
p
e
.q
e
p
d
.q
e
p
e
.q
d
p
d
.q
d
p
e
q
e
p
d
q
d
p
e
+ p
d
q
e
+ q
d
O algoritmo
Algoritmo Mult(n,p,q)
Como ambos s tem um algarismo cada, s
precisamos multiplica-los

Se n = 1, ento
r pq;
Seno




p
1
esquerda(n/2);
p
2
direita(n/2);
x p
1
+ p
2

Como ambos s tem um algarismo
cada, s precisamos multiplica-los
q
1
esquerda(n/2);
q
2
direita(n/2);
y q
1
+ q
2

" X " ou " Y " tm no mximo n/2 + 1 algarismos, pois
quando somamos dois nmeros com n/2 algarismos o
resultado tem n/2 ou n/2 + 1 algarismos.
se |x| = n/2 ento
x
1
0;
x
2
x;
seno
x
1
esquerda(1,x)
x
2
direita(n/2,x);
fim se;
Se |Y| = n/2 ento
y
1
0;
y
2
y;
seno
y
1
esquerda(1,y);
y
2
direita(n/2,y);
fim se;
t x
1
y
1
b
n
+ ( x
1
y
2
+ x
2
y
1
) b
n/2

+ Mult(n/2, x
2
, y
2
);
u Mult(n/2, p
1
, q
1
);
v Mult(n/2, p
2
, q
2
);
r u .b
n
+( t -u -v ) .b
n/2
+ v;
fim se;
pare com sada (r).
Algoritmo
Multiplica r
e
= p
e
.q
e

Multiplica r
d
= p
d
.q
d

Soma p = (p
e
+p
d
)
Soma q = (q
e
+q
d
)
Multiplica r
AUX
= p. q
Determina r
e
= r
AUX
- r
e
- r
d

Shift v
c
= r
c
.x
n/2

Shift v
d
= r
d
.x
n
Soma r = r
e
+ v
c
.x
n/2
+ v
d
.x
n



T(n/2)
T(n/2)
C.n
C.n
T(n/2)
C.n
C.n
C.n
Eficincia
T(n) = 3.T(n/2) + C.n , T(1) = C
T(n)/n = C.(3
lg(n)+1
/n - 2)
T(n) = C.n.(3
lg(n)+1
/n - 2)
T(n) = C.( 3.3
lg(n)
- 2.n )
T(n) = C.( 3.(2
lg(3)
)
lg(n)
- 2.n )
T(n) = C.( 3.(2
lg(n)
)
lg(3)
- 2.n )
T(n) = C.( 3.n
lg(3)
- 2.n )

Programao Dinmica - Motivao
Nmeros de Fibonacci
Entrada: Um nmero inteiro n.
Sada: O nmero de Fibonacci Fn, definido da
seguinte forma:
F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2 para n 2.
Soluo clssica utiliza recurso
Fib(n)
if n 1 then return n
return Fib(n 1) + Fib(n 2)
Sobre a Soluo Apresentada
Sabemos provar a corretude do algoritmo.
Anlise atravs da resoluo de uma relao
de recorrncia:
T(n) = T(n 1) + T(n 2) + c
O(2n)
Soluo ineficiente.
Qual o motivo da ineficincia?
Voc conhece uma soluo alternativa?
A Programao Dinmica um mtodo que
resolve problemas dividindo-os em problemas
menores para poder solucion-los. Ao contrrio do
mtodo de diviso e conquista, a programao
dinmica aplicvel quando esses subproblemas
possuem dependncia entre si, onde, sero
resolvidos e armazenados em uma tabela para
evitar recalcular a respostas sempre que o
subproblema encontrado.
A programao dinmica aplicada em problemas
de otimizao

Programao Dinmica
Caracterizao de PD
Quando a estratgia de DC gera um nmero grande de
problemas idnticos, recurso se torna muito caro.
Melhor armazenar as solues parciais em uma tabela.
Como transformar DC em PD:
A parte do algoritmo que corresponde a conquista
(recurso) deve ser substituda por olhada na tabela.
Em vez de retornar um valor, armazen-lo na tabela.
Caso base para iniciar a tabela.
Determinar padro de preenchimento do restante da
tabela.
Quando Aplicar Programao Dinmica
Aplicar em problemas que, em princpio, parece
requerer muito tempo para ser resolvido (em
geral de ordem exponencial).
Principais caractersticas:
Princpio da Otimalidade (subproblemas
timos): o valor timo global pode ser definido
em termos dos valores timos dos
subproblemas.
Dependncia entre os Subproblemas: os
subproblemas no soindependentes. Existe
um overlap entre eles (logo, devem ser
construdos bottom-up
Etapas da Programao Dinmica
O algoritmo de programao dinmica dividido
em 4 etapas:
caracteriza a estrutura de uma soluo tima;
define recursivamente o valor de uma soluo
tima;
calcula o valor de uma soluo tima em um
processo de baixo para cima;
constri uma soluo tima partir de
informaes dadas. Sendo que a ltima etapa
pode ser omitida se apenas o valor de uma
soluo tima exigido.
onde se encontra as subestruturas timas,
para depois usa-las para construir uma soluo
tima para o problema, ou seja, achando uma
soluo tima para os subproblemas,
encontraremos uma soluo tima para o todo.
Utilizando recursividade, vamos achar o
custo de uma soluo tima para o
problema, utilizando solues timas para
os subproblemas.
Problema : Multiplicao de Cadeia de
Matrizes
Qual a melhor forma, ou seja, a mais eficiente, para
realizar multiplicaes entre uma cadeia de matrizes
realizando o menor nmero de multiplicaes?

Como funciona multiplicao de matrizes:
S podemos calcular o produto entre duas matrizes, se
elas forem compatveis, ou seja, se o nmero de colunas
da primeira matriz for igual ao nmero de linhas da
segunda matriz. Sendo assim, temos que, Aixj e Ajxk, so
matrizes compatveis para ocorrer multiplicao.
Exemplos de matrizes compatveis:
A50x10 * B10x5,
A3x4 * B4x10,

Como colocar os parnteses?
Para calcularmos o produto de uma seqncia de
matrizes, por exemplo, A1A2A3A4, temos 5 formas de
multiplicao, formas de colocar os parnteses em
lugares diferentes, sendo que as matrizes no podem
ser invertidas na ordem, ou seja, A1A2A3A4
A1A3A4A2.
Exemplos:
(A1(A2(A3A4)))
(A1((A2A3)A4))
((A1A2)(A3A4))
((A1(A2A3))A4)
(((A1A2)A3)A4).
Multiplicao entre duas matrizes
O produto de duas matrizes calculado da seguinte
forma:
Seja Amxn e Bnxr, a matriz C = A.B definida por
c(i,j) = a(i,1) b(1,j) + a(i,2) b(2,j) + ... + a(i,m) b(m,j)
O tamanho da matriz resultante C sempre igual ao
numero de linhas da primeira matriz e o nmero de
colunas da segunda matriz, isto , mxr.
Nmero de multiplicaes realizadas para determinar a
matriz C m.n.r (???)
Multiplicao entre 3 matrizes
Dada uma seqncia de 3 matrizes, considere a seguinte
multiplicao: A1.A2.A3
Onde a ordem de cada uma delas :
A1 = (5 x 20)
A2 = (20 x 2)
A3 = (2 x 100)
Veja os exemplos de multiplicao:
(A1A2) A3 A1 A2 = 200 multiplicaes escalares
Matriz resultante (5 x 2) A3 = 1000 multiplicaes
escalares. Soma = 200 + 1000 = 1200 multiplicaes .
A1 (A2A3) A2 A3 = 4000 multiplicaes escalares
A1 Matriz resultante (20 x 100) = 10000 multiplicaes
escalares. Soma = 4000 + 10000 = 14000
multiplicaes.
Colocao dos Parnteses
O modo como uma cadeia de matrizes colocada entre
parnteses pode ter um impacto dramtico sobre o custo
de avaliao do produto.


Frmula recursiva para o nmero de colocao entre
parnteses:
P(n) =

{
1 se n = 1
n -1
P(k)P(n-k) se n 2
k = 1

As Quatro Etapas da Programao
Dinmica para Resoluo do Problema
Etapa 1 A estrutura de uma colocao
tima dos parnteses:

Notao Ai..j, que resulta no produto AiAi+1...Aj

Dividir o problema em duas subproblemas atravs
da parentizao de duas sub-cadeias A1..Ak e
Ak+1..An, onde cada sub-cadeia deve ter soluo
tima para que A1..An seja tima.

Etapa 2 - uma soluo recursiva
m[i,j] = custo da multiplicao do subproblema i..j. Se i =
j ento temos uma soluo trivial e no realizaremos
nenhuma multiplicao escalar. Mas se i < j ento
teremos que encontrar um modo de dividir o problema
em mais subproblemas e achar o melhor custo desses
dois e somar com o custo da multiplicao entre seus
resultados, conforme podemos ver na formula:
m[i,j] = m[i,k] + m[k+1,j] + pi-1pkpj.

Como no sabemos o valor de k para a melhor soluo
do subproblema, teremos que encontrar seguindo a
seguinte regra:
0 se i = j
min{m[i,k] + m[k+1,j] + pi-1pkpj.} se i < j

Iremos definir tambm uma matriz s[i,j] para guardar os
melhores valores de k, que minimizaro o custo cada
subproblema.
M[i,j] =

Etapa 3 como calcular os custos timos
O algoritmo que vimos na etapa 2 no soluciona o
problema, pois ele de ordem exponencial.
O algoritmo com recurso ir recalcular toda vez que
encontrar um subproblema que j tenha resolvido.
Para otimizar podemos usar a programao dinmica e
assim calcular o custo timo usando uma abordagem
tabular de cima para baixo.
O algoritmo
(
(
(
(
(
(
(
(

=
(
(
(
(
(
(
(
(

= S M
0
0
0
0
0
0
(
(
(
(
(
(
(
(

=
(
(
(
(
(
(
(
(

=
5
4
3
2
1
0
5000 0
1000 0
750 0
2625 0
15750 0
S M
l =2
(
(
(
(
(
(
(
(

=
(
(
(
(
(
(
(
(

=
5
5 4
3 3
3 2
1 1
0
5000 0
3500 1000 0
2500 750 0
4375 2625 0
7875 15750 0
S M
l =3
(
(
(
(
(
(
(
(

=
(
(
(
(
(
(
(
(

=
5
5 4
3 3 3
3 3 2
3 1 1
0
5000 0
3500 1000 0
5375 2500 750 0
7125 4375 2625 0
9375 7875 15750 0
S M
l =4
(
(
(
(
(
(
(
(

=
(
(
(
(
(
(
(
(

=
5
5 4
3 3 3
3 3 3 2
3 3 1 1
0
5000 0
3500 1000 0
5375 2500 750 0
10500 7125 4375 2625 0
11875 9375 7875 15750 0
S M
l =5
(
(
(
(
(
(
(
(

=
(
(
(
(
(
(
(
(

=
5
5 4
3 3 3
3 3 3 2
3 3 3 1 1
0
5000 0
3500 1000 0
5375 2500 750 0
10500 7125 4375 2625 0
15125 11875 9375 7875 15750 0
S M
l =6
Programao de Linha de Montagem
Programao de Linha de Montagem
Um chassi de automvel entra em cada linha de
montagem, tem as peas adicionadas a ele em uma
srie de estaes, e um automvel pronto sai no final da
linha.
Cada linha de montagem tem n estaes, numeradas
com j = 1,2,3....n. Denotamos o j - sima estao na
linha i (onde i 1 ou 2) por Si,j .
A j sima estao na linha 1 (S1,j) executa a mesma
funo que a j sima estao na linha 2 (S2 , j).
As estaes foram construdas em pocas diferentes e
com tecnologias diferentes, de forma que o tempo
exigido em cada estao varia, at mesmo entre as
estaes na mesma posio nas duas linhas.
Programao de Linha de Montagem
Programao de Linha de Montagem

Programao de Linha de Montagem

Funcionamento:
Linha 1 calcula f
1
[1] e f
2
[1];
LOOP Linha 3 a 13 calcula f
i
[ j ] e l
i
[ j ] para i = 1,2
e j = 2,3,...,n.
Linhas 4 e 8 calculam f
1
[ j ] e l
1
[ j ] ;
Linhas 9 a 13 calculam f
2
[ j ] e l
2
[ j ];
Linhas 14 a 18 calculam f* e l*;
Como as linhas 1 e 2 e 4 a 18 demoram um tempo
constante, e como cada uma das n-1 iteraes do loop
for das linhas 3 a 13 demoram tempo constante, o
procedimento inteiro demora o tempo (n).
Programao de Linha de Montagem
Problema da mochila
Decomposio do problema em estgios.

Em vez de considerar uma soluo (x
1
,x
2
,...,x
n
) completa de
uma s vez, visualizar o problema como se as decises fossem
tomadas para um item de cada vez.

Aps k decises, tero sido determinados quais dos primeiros k
itens devem ser selecionados e, consequentemente, tero sido
determinados os valores das variveis x
1
,x
2
,...,x
k
.

Neste ponto, o valor acumulado

O volume acumulado

=
k
j j
x a
1 j
j
k
j
j
x c

=1
Estgio:
cada varivel do problema

Estado:
volume total ocupado com as decises j tomadas

Deciso:
selecionar ou no um item (isto , fazer x
k
=1)

Custo da deciso de selecionar o item k:
aumento de c
k
unidades no lucro parcial acumulado

Efeito da deciso de selecionar o item k:
aumento do volume ocupado (estado) em a
k
unidades
Problema da mochila
Definio:
y
k
(u) = lucro mximo que pode ser obtido com volume total igual a u
e usando apenas itens do conjunto {1,...,k}

Quanto vale y
0
(0)?
y
0
(0) = 0 (sem objetos selecionados, o peso e o lucro so nulos)

Definir y
k
(u) = - se impossvel obter um volume total igual a u
apenas com itens dentre os do conjunto {1,...,k}.

Quanto valem y
0
(u) e y
k
(0)?
y
0
(u) = - para u > 0 (impossvel acumular peso sem itens)
y
k
(0) = 0 para k = 1,2,...,n (nenhum item selecionado)

Calcular y
k
(u) para k = 1,...,n e u = 0,...b, a partir de y
0
(0).


Problema da mochila
Problema da mochila
y
k
(u) = lucro mximo que pode ser obtido com volume total igual a u
e usando apenas itens do conjunto {1,...,k}

Calcular y
k
(u) para k = 1,...,n e u = 0,...b:






Interpretao: h duas alternativas para se obter y
k
(u), dependendo
do item k ser selecionado ou no
y
k
(u) = y
k-1
(u), se o item k no usado
y
k
(u) = y
k-1
(u-a
k
)+c
k
, se o item k usado


{ }

= = +
= =
= =
=

n k b u c a u y u y
b;k u
k u
u y
k k k k
k
,..., 1 ; ,..., 0 , ) ( ), ( max
0 ,..., 1 ,
0 ; 0 , 0
) (
1 1
Problema da mochila

Observar que o lucro associado ao estado resultante de uma
deciso depende apenas do valor desta deciso e do estado
atual, mas no depende da forma como este ltimo foi atingido.

{ }

= = +
= =
= =
=

n k b u c a u y u y
b;k u
k u
u y
k k k k
k
,..., 1 ; ,..., 0 , ) ( ), ( max
0 ,..., 1 ,
0 ; 0 , 0
) (
1 1
5 ,..., 1 }, 1 , 0 {
4 2 3 3 : a sujeito
3 2 2 3 max
5 4 3 2 1
5 4 3 2 1
= e
= + + + +
+ + + +
j x
x x x x x
x x x x x
j
y
5
(4) =
Problema da mochila
Problema da mochila
5 ,..., 1 }, 1 , 0 {
4 2 3 3 : a sujeito
3 2 2 3 max
5 4 3 2 1
5 4 3 2 1
= e
s + + + +
+ + + +
j x
x x x x x
x x x x x
j
5 ,..., 1 }, 1 , 0 {
2 3 3 : a sujeito
3 2 2 3 max
5 4 3 2 1
5 4 3 2 1
= e
= + + + +
+ + + +
j x
b x x x x x
x x x x x
j
y
5
(b) =
Valor timo = max
b=0,...,4
{y
5
(b)}
Problema da mochila
y
0
(4) y
5
(4)
y
0
(3) y
5
(3)
y
0
(2) y
5
(2)
y
0
(1) y
5
(1)
y
0
(0) y
1
(0) y
2
(0) y
3
(0) y
4
(0) y
5
(0)
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
0
(4)
y
0
(3)
y
0
(2)
y
0
(1)
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
Problema da mochila
-
-
-
-
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- ?
- ?
- ?
- ?
0 ?
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
-
-
- -
- -
0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
-
- 3
- -
- -
0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
-
- 3
- -
- -
0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- -
- 3
- -
- -
0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- -
- 3
- -
- -
0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
- - ?
- 3 ?
- - ?
- - ?
0 0 ?
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
Problema da mochila
- -
- 3
- -
- -
0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- -
- 3
- - -
- - -
0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- -
- 3
- - -
- - -
0 0 0
2
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- -
- 3
- - -
- - -
0 0 0
0
2
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- -
- 3 3
- - -
- - -
0 0 0
0
2
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
- - -
- 3 3
- - -
- - -
0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - -
- 3 3
- - -
- - -
0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - ?
- 3 3 ?
- - - ?
- - - ?
0 0 0 ?
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - -
- 3 3
- - -
- - -
0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - -
- 3 3
- - -
- - - 2
0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - -
- 3 3
- - - -
- - - 2
0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - -
- 3 3
- - - -
- - - 2
0 0 0 0
2
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - -
- 3 3
- - - -
- - - 2
0 0 0 0
2
0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - -
- 3 3 3
- - - -
- - - 2
0 0 0 0
2
0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3
- - - -
- - - 2
0 0 0 0
2
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3
- - - -
- - - 2
0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 ?
- 3 3 3 ?
- - - - ?
- - - 2 ?
0 0 0 0 ?
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3
- - - -
- - - 2
0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3
- - - -
- - - 2
0 0 0 0 0
1
0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3
- - - -
- - - 2 2
0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3
- - - -
- - - 2 2
0 0 0 0 0
1
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
1
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
1
0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
1
0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5 ?
- 3 3 3 3 ?
- - - - 3 ?
- - - 2 2 ?
0 0 0 0 0 ?
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0 0
0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5
- 3 3 3 3
- - - - 3
- - - 2 2 2
0 0 0 0 0 0
0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5
- 3 3 3 3
- - - - 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5
- 3 3 3 3
- - - - 3
- - - 2 2 2
0 0 0 0 0 0
0
3
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
0
3
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
0
3
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
5
(4) = 6
y
5
(3) = 5
y
5
(2) = 3
y
5
(1) = 2
y
5
(0) = 0
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
5
(4) = 6
y
5
(3) = 5
y
5
(2) = 3
y
5
(1) = 2
y
5
(0) = 0
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
5
(4) = 6
y
5
(3) = 5
y
5
(2) = 3
y
5
(1) = 2
y
5
(0) = 0
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
5
(4) = 6
y
5
(3) = 5
y
5
(2) = 3
y
5
(1) = 2
y
5
(0) = 0
x
5
=1
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
5
(4) = 6
y
5
(3) = 5
y
5
(2) = 3
y
5
(1) = 2
y
5
(0) = 0
x
5
=1 x
4
=1
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
5
(4) = 6
y
5
(3) = 5
y
5
(2) = 3
y
5
(1) = 2
y
5
(0) = 0
x
5
=1 x
4
=1 x
3
=1
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
5
(4) = 6
y
5
(3) = 5
y
5
(2) = 3
y
5
(1) = 2
y
5
(0) = 0
x
5
=1 x
4
=1 x
3
=1 x
2
=0
Problema da mochila
- - - 5 5 6
- 3 3 3 3 5
- - - - 3 3
- - - 2 2 2
0 0 0 0 0 0
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
y
5
(4) = 6
y
5
(3) = 5
y
5
(2) = 3
y
5
(1) = 2
y
5
(0) = 0
x
5
=1 x
4
=1 x
3
=1 x
2
=0 x
1
=0
Problema da mochila
Os estados em verde e as transies possveis (arcos com
setas) definem um grafo multiestgio para a aplicao da
recurso de programao dinmica.

Nmero de operaes (tempo de processamento) diretamente
proporcional ao produto do tamanho da mochila pelo nmero de
variveis (preencher inteiramente a matriz de dimenses
(b+1)x(n+1)): aplicabilidade limitada aos valores de n e de b

Caso seja possvel levar mltiplas cpias de cada item, aumenta
o nmero de decises e a complexidade do problema.
Problema da mochila