paradigmas programação-parte2

Upload: derik-macedo

Post on 08-Feb-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 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