7/22/2019 Paradigmas programao-parte2
1/113
Diviso e conquista
Programao dinmica
Algoritmos gulosos
Tcnicas de programao
7/22/2019 Paradigmas programao-parte2
2/113
Diviso e ConquistaHistoricamente, o termo diviso e conquista foi originado
pelos generais napolenicos (1800 at 1814) que aplicavauma estratgia de dividir o exrcito inimigo em vrios sub-exrcitos separados, para poder vencer cada uma daspartes facilmente. O mtodo de desenvolvimento dealgoritmos por diviso e conquista reflete esta estratgiamilitar.
Muitos algoritmos teis so recursivos em sua estrutura:para resolver um dado problema, eles chamam assimmesmos recursivamente uma ou mais vezes para lidarcom subproblemas intimamente relacionados. Em geral,
esses algoritmos seguem uma abordagem de dividir econquistar: eles desmembram o problema em vriossubproblemas que so semelhantes ao problema original,mas menores em tamanho, resolvem os subproblemasrecursivamente e depois combinam essas solues com o
objetivo de criar uma soluo para o problema original.
7/22/2019 Paradigmas programao-parte2
3/113
Diviso e ConquistaDada uma instncia de tamanho n de umproblema o mtodo da diviso e conquista divide-a em k substncias disjuntas (1 k = n) quecorrespondem a k subproblemas distintos eindependentes. Estes subproblemas ao resolvidos
separadamente e ento acha-se uma forma decombinar as solues parciais para se obter asoluo do problema original. Se os ksubproblemas gerados no passo anterior soainda relativamente grandes deve-se aplicar omtodo da diviso e conquista sucessivas vezesat que o tamanho do subproblema gerado sejato pequeno que sua soluo possa ser obtida deforma trivial.
7/22/2019 Paradigmas programao-parte2
4/113
Diviso e Conquista
A descrio do mtodo sugere imediatamente ouso de uma estrutura recursiva para suaimplementao.
O mtodo de diviso e conquista implementado em algoritmos que utilizem ametodologia Top Down, onde a gerao dossubproblemas feita de cima para baixo.
7/22/2019 Paradigmas programao-parte2
5/113
Diviso e Conquista
O paradigma de dividir e conquistar envolve trspassos em cada nvel de recurso:
1) Dividiro problema em um determinadonmero de subproblemas.
2) Conquistaros subproblemas, resolvendo-osrecursivamente. Porm, se os tamanhos dossubproblemas forem pequenos o bastante,
basta resolver os subproblemas de maneiradireta. 3) Combinaras solues dadas aos
subproblemas, afim de formar a soluo para oproblema original.
7/22/2019 Paradigmas programao-parte2
6/113
Problema: Multiplicao de Inteiros
grandes
1.234.567.890 =1x109+2x108+3x107+4x106+5x105+ 6x104+7x103+8x102+
9x101+0x100
na base x1x9+2x8+3x7+4x6+5x5+ 6x4+7x3+8x2+ 9x1+0x0
7/22/2019 Paradigmas programao-parte2
7/113
p . q ... fora bruta
Representao vetorial1x9+2x8+3x7+4x6+5x5+ 6x4+7x3+8x2+ 9x1+0x0
( 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 !
7/22/2019 Paradigmas programao-parte2
8/113
p . q ...dividir-e-conquistar
px q=(0, 1,2, 3, 4, 5, 6, 7) x ( 9, 3, 7, 4, 9, 2) =r
px q= (pe+pdx4) . (qe+qd.x4)
px q= pe.qe + (pe.qd+pd.qe).x4 + pd.qd.x8
px q= re + rc.x4 + rd.x8
re =pe.qe ; rd =pd.qd ; rAUX =(pe+pd). (qe+qd)
rc =rAUX - re -rd
trocar .s por +s !!!!
pe pd qe qd
7/22/2019 Paradigmas programao-parte2
9/113
p . q ...dividir-e-conquistar
pe.qe
pd.qe
pe.qd pd.qd
pe
qe
pd
qd
pe + pd
qe+ qd
7/22/2019 Paradigmas programao-parte2
10/113
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
p1 esquerda(n/2);
p2 direita(n/2);
x p1+ p2
Como ambos s tem um algarismocada, s precisamos multiplica-los
q1 esquerda(n/2);
q2 direita(n/2);
y q1+ q2
" X "ou " Y " tm no mximo n/2 + 1 algarismos, poisquando somamos dois nmeros com n/2 algarismos oresultado tem n/2 ou n/2 + 1 algarismos.
7/22/2019 Paradigmas programao-parte2
11/113
se |x| = n/2 ento
x1 0;
x2 x;
seno x1 esquerda(1,x)
x2 direita(n/2,x);
fim se;
Se |Y| = n/2 ento y1 0;
y2 y;
seno
y1 esquerda(1,y);
y2 direita(n/2,y);
fim se;
7/22/2019 Paradigmas programao-parte2
12/113
t x1y1bn+ ( x1y2+ x2y1)bn/2
+ Mult(n/2, x2, y2); u Mult(n/2, p1,q1);
v Mult(n/2, p2,q2);
r u .bn+( t -u -v ).bn/2+ v; fim se;
pare com sada (r).
7/22/2019 Paradigmas programao-parte2
13/113
Algoritmo Multiplica re =pe.qe
Multiplica rd =pd.qd Soma p =(pe+pd)
Soma q = (qe+qd)
Multiplica rAUX = p. q Determina re =rAUX - re -rd
Shift vc =rc.xn/2
Shift vd = rd.xn
Soma r = re + vc.xn/2 + vd.xn
T(n/2)
T(n/2)
C.nC.n
T(n/2)
C.n
C.n
C.n
7/22/2019 Paradigmas programao-parte2
14/113
Eficincia
T(n) = 3.T(n/2) + C.n , T(1) = C
T(n)/n = C.(3lg(n)+1/n - 2)
T(n) = C.n.(3lg(n)+1/n - 2)
T(n) = C.( 3.3lg(n) - 2.n )
T(n) = C.( 3.(2lg(3)
)lg(n)
- 2.n )T(n) = C.( 3.(2lg(n))lg(3) - 2.n )
T(n) = C.( 3.nlg(3) - 2.n )
7/22/2019 Paradigmas programao-parte2
15/113
Programao Dinmica - Motivao
Nmeros de FibonacciEntrada: Um nmero inteiro n.
Sada: O nmero de Fibonacci Fn, definido daseguinte forma:F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2 para n 2.
Soluo clssica utiliza recurso
Fib(n)
if n 1 then return nreturn Fib(n1) + Fib(n2)
7/22/2019 Paradigmas programao-parte2
16/113
Sobre a Soluo Apresentada
Sabemos provar a corretude do algoritmo.
Anlise atravs da resoluo de uma relaode recorrncia:
T(n) = T(n1) + T(n2) + cO(2n)
Soluo ineficiente.
7/22/2019 Paradigmas programao-parte2
17/113
Qual o motivo da ineficincia?
Voc conhece uma soluo alternativa?
7/22/2019 Paradigmas programao-parte2
18/113
A Programao Dinmica um mtodo queresolve problemas dividindo-os em problemas
menores para poder solucion-los. Ao contrrio domtodo de diviso e conquista, a programaodinmica aplicvel quando esses subproblemaspossuem dependncia entre si, onde, sero
resolvidos e armazenados em uma tabela paraevitar recalcular a respostas sempre que osubproblema encontrado.
A programao dinmica aplicada em problemasde otimizao
Programao Dinmica
7/22/2019 Paradigmas programao-parte2
19/113
Caracterizao de PD
Quando a estratgia de DC gera um nmero grande deproblemas 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 databela.
7/22/2019 Paradigmas programao-parte2
20/113
Quando Aplicar Programao Dinmica
Aplicar em problemas que, em princpio, parecerequerer muito tempo para ser resolvido (emgeral de ordem exponencial).
Principais caractersticas:Princpio da Otimalidade(subproblemastimos): o valor timo global pode ser definidoem termos dos valores timos dos
subproblemas. Dependncia entre os Subproblemas: os
subproblemas no soindependentes. Existeum overlap entre eles (logo, devem serconstrudos bottom-up
7/22/2019 Paradigmas programao-parte2
21/113
Etapas da Programao Dinmica
O algoritmo de programao dinmica divididoem 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 deinformaes dadas. Sendo que a ltima etapa
pode ser omitida se apenas o valor de umasoluo tima exigido.
onde se encontra as subestruturas timas,para depois usa-las para construir uma soluotima para o problema, ou seja, achando uma
soluo tima para os subproblemas,encontraremos uma soluo tima para o todo.
Utilizando recursividade, vamos achar ocusto de uma soluo tima para o
problema, utilizando solues timas paraos subproblemas.
7/22/2019 Paradigmas programao-parte2
22/113
Problema : Multiplicao de Cadeia de
Matrizes
Qual a melhor forma, ou seja, a mais eficiente, pararealizar multiplicaes entre uma cadeia de matrizesrealizando o menor nmero de multiplicaes?
Como funciona multiplicao de matrizes:S podemos calcular o produto entre duas matrizes, seelas forem compatveis, ou seja, se o nmero de colunasda primeira matriz for igual ao nmero de linhas da
segunda matriz. Sendo assim, temos que, Aixj e Ajxk, somatrizes compatveis para ocorrer multiplicao.Exemplos de matrizes compatveis:
A50x10 * B10x5,
A3x4 * B4x10,
7/22/2019 Paradigmas programao-parte2
23/113
Como colocar os parnteses?
Para calcularmos o produto de uma seqncia dematrizes, por exemplo, A1A2A3A4, temos 5 formas demultiplicao, formas de colocar os parnteses em
lugares diferentes, sendo que as matrizes no podemser invertidas na ordem, ou seja, A1A2A3A4 A1A3A4A2.
Exemplos:(A1(A2(A3A4)))(A1((A2A3)A4))((A1A2)(A3A4))((A1(A2A3))A4)(((A1A2)A3)A4).
7/22/2019 Paradigmas programao-parte2
24/113
Multiplicao entre duas matrizes
O produto de duas matrizes calculado da seguinteforma:
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 aonumero de linhas da primeira matriz e o nmero decolunas da segunda matriz, isto , mxr.
Nmero de multiplicaes realizadas para determinar amatriz C m.n.r (???)
7/22/2019 Paradigmas programao-parte2
25/113
Multiplicao entre 3 matrizes
Dada uma seqncia de 3 matrizes, considere a seguinte
multiplicao: A1.A2.A3Onde a ordem de cada uma delas :A1 = (5 x 20)A2 = (20 x 2)
A3 = (2 x 100)Veja os exemplos de multiplicao:(A1A2) A3A1 A2 = 200 multiplicaes escalares
Matriz resultante (5 x 2) A3 = 1000 multiplicaesescalares. Soma = 200 + 1000 = 1200 multiplicaes .
A1 (A2A3)A2 A3 = 4000 multiplicaes escalaresA1 Matriz resultante (20 x 100) = 10000 multiplicaesescalares. Soma = 4000 + 10000 = 14000multiplicaes.
7/22/2019 Paradigmas programao-parte2
26/113
Colocao dos Parnteses
O modo como uma cadeia de matrizes colocada entreparnteses pode ter um impacto dramtico sobre o custode avaliao do produto.
Frmula recursiva para o nmero de colocao entreparnteses:
P(n) = {1 se n = 1n -1 P(k)P(n-k) se n 2k = 1
7/22/2019 Paradigmas programao-parte2
27/113
As Quatro Etapas da Programao
Dinmica para Resoluo do Problema
Etapa 1 A estrutura de uma colocaotima dos parnteses:
Notao Ai..j, que resulta no produto AiAi+1...Aj
Dividir o problema em duas subproblemas atravsda parentizao de duas sub-cadeias A1..Ak e
Ak+1..An, onde cada sub-cadeia deve ter soluotima para que A1..Anseja tima.
7/22/2019 Paradigmas programao-parte2
28/113
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 entoteremos que encontrar um modo de dividir o problemaem mais subproblemas e achar o melhor custo dessesdois e somar com o custo da multiplicao entre seusresultados, 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 soluodo subproblema, teremos que encontrar seguindo aseguinte regra:
0 se i = jmin{m[i,k] + m[k+1,j] + pi-1pkpj.} se i < j
Iremos definir tambm uma matriz s[i,j] para guardar osmelhores valores de k, que minimizaro o custo cada
subproblema.
M[i,j] =
7/22/2019 Paradigmas programao-parte2
29/113
Etapa 3 como calcular os custos timos
O algoritmo que vimos na etapa 2 no soluciona oproblema, pois ele de ordem exponencial.
O algoritmo com recurso ir recalcular toda vez queencontrar um subproblema que j tenha resolvido.
Para otimizar podemos usar a programao dinmica eassim calcular o custo timo usando uma abordagem
tabular de cima para baixo.
7/22/2019 Paradigmas programao-parte2
30/113
O algoritmo
7/22/2019 Paradigmas programao-parte2
31/113
SM
0
0
0
0
0
0
7/22/2019 Paradigmas programao-parte2
32/113
5
4
3
2
1
0
50000
10000
7500
26250
157500
S
l = 2
7/22/2019 Paradigmas programao-parte2
33/113
5
54
33
32
11
0
50000
350010000
25007500
437526250
7875157500
SM
l = 3
7/22/2019 Paradigmas programao-parte2
34/113
5
54
333
332
311
0
50000
350010000
537525007500
7125437526250
93757875157500
SM
l = 4
7/22/2019 Paradigmas programao-parte2
35/113
5
54
333
3332
3311
0
50000
350010000
537525007500
105007125437526250
1187593757875157500
SM
l = 5
7/22/2019 Paradigmas programao-parte2
36/113
5
54
333
3332
33311
0
50000
350010000
537525007500
105007125437526250
151251187593757875157500
SM
l = 6
7/22/2019 Paradigmas programao-parte2
37/113
Programao de Linha de Montagem
7/22/2019 Paradigmas programao-parte2
38/113
Programao de Linha de Montagem
Um chassi de automvel entra em cada linha demontagem, tem as peas adicionadas a ele em umasrie de estaes, e um automvel pronto sai no final dalinha.
Cada linha de montagem tem n estaes, numeradas
com j = 1,2,3....n. Denotamos o j - sima estao nalinha i (onde i 1 ou 2) por Si , j .
A jsima estao na linha 1 (S1,j) executa a mesmafuno que ajsima estao na linha 2 (S2 , j).
As estaes foram construdas em pocas diferentes ecom tecnologias diferentes, de forma que o tempoexigido em cada estao varia, at mesmo entre asestaes na mesma posio nas duas linhas.
7/22/2019 Paradigmas programao-parte2
39/113
Programao de Linha de Montagem
7/22/2019 Paradigmas programao-parte2
40/113
7/22/2019 Paradigmas programao-parte2
41/113
7/22/2019 Paradigmas programao-parte2
42/113
7/22/2019 Paradigmas programao-parte2
43/113
7/22/2019 Paradigmas programao-parte2
44/113
7/22/2019 Paradigmas programao-parte2
45/113
Programao de Linha de Montagem
7/22/2019 Paradigmas programao-parte2
46/113
Programao de Linha de Montagem
7/22/2019 Paradigmas programao-parte2
47/113
7/22/2019 Paradigmas programao-parte2
48/113
Funcionamento: Linha 1 calcula f1[1] e f2[1];
LOOPLinha 3 a 13 calcula fi[ j ] e li[ j ] para i = 1,2e j = 2,3,...,n.
Linhas 4 e 8 calculam f1[ j ] e l1[ j ] ;
Linhas 9 a 13 calculam f2[ j ] e l2[ j ];
Linhas 14 a 18 calculam f* e l*;
Como as linhas 1 e 2 e 4 a 18 demoram um tempoconstante, e como cada uma das n-1 iteraes do loopfor das linhas 3 a 13 demoram tempo constante, oprocedimento inteiro demora o tempo (n).
Programao de Linha de Montagem
7/22/2019 Paradigmas programao-parte2
49/113
7/22/2019 Paradigmas programao-parte2
50/113
Problema da mochila
Decomposio do problema em estgios.
Em vez de considerar uma soluo (x1,x2,...,xn) completa deuma s vez, visualizar o problema como se as decises fossemtomadas para um item de cada vez.
Aps k decises, tero sido determinados quais dos primeiros kitens devem ser selecionados e, consequentemente, tero sidodeterminados os valores das variveis x1,x2,...,xk.
Neste ponto, o valor acumulado
O volume acumulado
k
jjxa1j
j
k
j
jxc1
7/22/2019 Paradigmas programao-parte2
51/113
Estgio:cada varivel do problema
Estado:volume total ocupado com as decises j tomadas
Deciso:selecionar ou no um item (isto , fazer xk=1)
Custo da deciso de selecionar o item k:aumento de ckunidades no lucro parcial acumulado
Efeito da deciso de selecionar o item k:aumento do volume ocupado (estado) em akunidades
Problema da mochila
7/22/2019 Paradigmas programao-parte2
52/113
Definio:yk(u) = lucro mximo que pode ser obtido com volume total igual a ue usando apenas itens do conjunto {1,...,k}
Quanto vale y0(0)? y
0(0) = 0 (sem objetos selecionados, o peso e o lucro so nulos)
Definir yk(u) = -se impossvel obter um volume total igual a uapenas com itens dentre os do conjunto {1,...,k}.
Quanto valem y0(u) e y
k(0)?
y0(u) = -para u > 0 (impossvel acumular peso sem itens) yk(0) = 0 para k = 1,2,...,n (nenhum item selecionado)
Calcular yk(u) para k = 1,...,n e u = 0,...b, a partir de y0(0).
Problema da mochila
7/22/2019 Paradigmas programao-parte2
53/113
Problema da mochila
yk(u) = lucro mximo que pode ser obtido com volume total igual a ue usando apenas itens do conjunto {1,...,k}
Calcular yk(u) para k = 1,...,n e u = 0,...b:
Interpretao: h duas alternativas para se obter yk(u), dependendodo item k ser selecionado ou no yk(u) = yk-1(u), se o item k no usado yk(u) = yk-1(u-ak)+ck, se o item k usado
nkbucauyuy
b;ku
ku
uy
kkkk
k
,...,1;,...,0,)(),(max
0,...,1,
0;0,0
)(
11
7/22/2019 Paradigmas programao-parte2
54/113
Problema da mochila
Observar que o lucro associado ao estado resultante de umadeciso depende apenas do valor desta deciso e do estadoatual, mas no depende da forma como este ltimo foi atingido.
nkbucauyuy
b;ku
ku
uy
kkkk
k
,...,1;,...,0,)(),(max
0,...,1,
0;0,0
)(
11
7/22/2019 Paradigmas programao-parte2
55/113
5,...,1},1,0{
4233:asujeito
3223max
54321
54321
jx
xxxxx
xxxxx
j
y5(4) =
Problema da mochila
7/22/2019 Paradigmas programao-parte2
56/113
Problema da mochila
5,...,1},1,0{
4233:asujeito3223max
54321
54321
jx
xxxxxxxxxx
j
5,...,1},1,0{
233:asujeito
3223max
54321
54321
jx
bxxxxx
xxxxx
j
y5(b) =
Valor timo = maxb=0,...,4{y5(b)}
7/22/2019 Paradigmas programao-parte2
57/113
Problema da mochila
y0(4) y5(4)
y0(3) y5(3)
y0(2) y5(2)
y0(1) y5(1)
y0(0) y1(0) y2(0) y3(0) y4(0) y5(0)
u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
7/22/2019 Paradigmas programao-parte2
58/113
y0(4)
y0(3)
y0(2)
y0(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
7/22/2019 Paradigmas programao-parte2
59/113
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
7/22/2019 Paradigmas programao-parte2
60/113
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
7/22/2019 Paradigmas programao-parte2
61/113
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
7/22/2019 Paradigmas programao-parte2
62/113
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
7/22/2019 Paradigmas programao-parte2
63/113
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
7/22/2019 Paradigmas programao-parte2
64/113
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
7/22/2019 Paradigmas programao-parte2
65/113
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
7/22/2019 Paradigmas programao-parte2
66/113
- - ?
- 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
7/22/2019 Paradigmas programao-parte2
67/113
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
7/22/2019 Paradigmas programao-parte2
68/113
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
7/22/2019 Paradigmas programao-parte2
69/113
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
7/22/2019 Paradigmas programao-parte2
70/113
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
P bl d hil
7/22/2019 Paradigmas programao-parte2
71/113
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
7/22/2019 Paradigmas programao-parte2
72/113
- - -
- 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
P bl d hil
7/22/2019 Paradigmas programao-parte2
73/113
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
P bl d hil
7/22/2019 Paradigmas programao-parte2
74/113
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
P bl d hil
7/22/2019 Paradigmas programao-parte2
75/113
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
P bl d hil
7/22/2019 Paradigmas programao-parte2
76/113
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
P bl d hil
7/22/2019 Paradigmas programao-parte2
77/113
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
P bl d hil
7/22/2019 Paradigmas programao-parte2
78/113
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
P bl d hil
7/22/2019 Paradigmas programao-parte2
79/113
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
7/22/2019 Paradigmas programao-parte2
80/113
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
7/22/2019 Paradigmas programao-parte2
81/113
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
7/22/2019 Paradigmas programao-parte2
82/113
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
7/22/2019 Paradigmas programao-parte2
83/113
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
7/22/2019 Paradigmas programao-parte2
84/113
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
7/22/2019 Paradigmas programao-parte2
85/113
Problema da mochila
- - - 5
- 3 3 3
- - - -
- - - 2
0 0 0 0 01
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
7/22/2019 Paradigmas programao-parte2
86/113
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
7/22/2019 Paradigmas programao-parte2
87/113
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
7/22/2019 Paradigmas programao-parte2
88/113
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
7/22/2019 Paradigmas programao-parte2
89/113
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
7/22/2019 Paradigmas programao-parte2
90/113
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
7/22/2019 Paradigmas programao-parte2
91/113
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
7/22/2019 Paradigmas programao-parte2
92/113
Problema da mochila
- - - 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
1
0u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
7/22/2019 Paradigmas programao-parte2
93/113
Problema da mochila
- - - 5 5
- 3 3 3 3
- - - - 3
- - - 2 2
0 0 0 0 0
1
0u = 4
u = 3
u = 2
u = 1
u = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5
Problema da mochila
7/22/2019 Paradigmas programao-parte2
94/113
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
7/22/2019 Paradigmas programao-parte2
95/113
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
7/22/2019 Paradigmas programao-parte2
96/113
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
7/22/2019 Paradigmas programao-parte2
97/113
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
7/22/2019 Paradigmas programao-parte2
98/113
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
7/22/2019 Paradigmas programao-parte2
99/113
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
7/22/2019 Paradigmas programao-parte2
100/113
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
7/22/2019 Paradigmas programao-parte2
101/113
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
7/22/2019 Paradigmas programao-parte2
102/113
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
7/22/2019 Paradigmas programao-parte2
103/113
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
7/22/2019 Paradigmas programao-parte2
104/113
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
y5(4) = 6
y5(3) = 5
y5(2) = 3
y5(1) = 2
y5(0) = 0
Problema da mochila
7/22/2019 Paradigmas programao-parte2
105/113
ob e a da oc a
- - - 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
y5(4) = 6
y5(3) = 5
y5(2) = 3
y5(1) = 2
y5(0) = 0
Problema da mochila
7/22/2019 Paradigmas programao-parte2
106/113
- - - 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
y5(4) = 6
y5(3) = 5
y5(2) = 3
y5(1) = 2
y5(0) = 0
Problema da mochila
7/22/2019 Paradigmas programao-parte2
107/113
- - - 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
y5(4) = 6
y5(3) = 5
y5(2) = 3
y5(1) = 2
y5(0) = 0
x5=1
Problema da mochila
7/22/2019 Paradigmas programao-parte2
108/113
- - - 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
y5(4) = 6
y5(3) = 5
y5(2) = 3
y5(1) = 2
y5(0) = 0
x5=1x4=1
Problema da mochila
7/22/2019 Paradigmas programao-parte2
109/113
- - - 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
y5(4) = 6
y5(3) = 5
y5(2) = 3
y5(1) = 2
y5(0) = 0
x5=1x4=1x3=1
Problema da mochila
7/22/2019 Paradigmas programao-parte2
110/113
- - - 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
y5(4) = 6
y5(3) = 5
y5(2) = 3
y5(1) = 2
y5(0) = 0
x5=1x4=1x3=1x2=0
Problema da mochila
7/22/2019 Paradigmas programao-parte2
111/113
- - - 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
y5(4) = 6
y5(3) = 5
y5(2) = 3
y5(1) = 2
y5(0) = 0
x5=1x4=1x3=1x2=0x1=0
Problema da mochila
7/22/2019 Paradigmas programao-parte2
112/113
Os estados em verdee as transies possveis (arcos com
setas) definem um grafo multiestgio para a aplicao darecurso de programao dinmica.
Nmero de operaes (tempo de processamento) diretamenteproporcional ao produto do tamanho da mochila pelo nmero devariveis (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, aumentao nmero de decises e a complexidade do problema.
Problema da mochila
7/22/2019 Paradigmas programao-parte2
113/113