zoukankan      html  css  js  c++  java
  • 《算法分析》作业9

    1. 问题

    LSC:求两串最长相同的子串

    0/1背包:V体积的背包,有N个物品 ,每个物品都有自己的体积和重量,问该背包能装的最大质量。

    2. 解析

    LCS:

    X :ABCBDAB

    Y :BDCABA

    //求表和长度

    (1):i=1

        j=1 X.A!=Y.B :dp[1][1]=max(dp[1][0],dp[0][1])=max(0,0)=0 删除Y

        j=2 X.A!=Y.D :dp[1][2]=max(dp[1][1],dp[0][2])=max(0,0)=0 删除Y

        j=3 X.A!=Y.C :dp[1][3]=max(dp[1][2],dp[0][3])=max(0,0)=0 删除Y

        j=4 X.A==B.A :dp[1][4]=dp[0][3]+1=1 删除X,Y

        j=5 X.A!=B.B :dp[1][5]=max(dp[1][4],dp[0][5])=max(1,0)=1 删除X

        j=6 X.A==B.A :dp[1][6]=dp[0][5]+1=1 删除X,Y

    (2):i=2

        j=1 X.B==Y.B :dp[2][1]=dp[1][0]+1=1 删除X,Y

        j=2 X.B!=Y.D :dp[2][2]=max(dp[2][1],dp[1][2])=max(1,0)=1 删除Y

        j=3 X.B!=Y.C :dp[2][3]=max(dp[2][2],dp[1][3])=max(1,0)=1 删除Y

        j=4 X.B!=B.A :dp[2][4]=max(dp[2][3],dp[1][4])=max(1,1)=1 删除Y

        j=5 X.B==B.B :dp[2][5]=dp[1][4]+1=2 删除X,Y

        j=6 X.B!=B.A :dp[2][6]=max(dp[2][5],dp[1][6])=max(2,1)=2 删除Y

    (3):i=3

        j=1 X.C!=Y.B :dp[3][1]=max(dp[3][0],dp[2][1])=max(0,1)=1 删除X

        j=2 X.C!=Y.D :dp[3][2]=max(dp[3][1],dp[2][2])=max(1,1)=1 删除Y

        j=3 X.C==Y.C :dp[3][3]=dp[2][2]+1=2 删除X,Y

        j=4 X.C!=B.A :dp[3][4]=max(dp[3][3],dp[2][4])=max(2,1)=2 删除Y

        j=5 X.C!=B.B :dp[3][5]=max(dp[3][4],dp[2][5])=max(2,2)=2 删除Y

        j=6 X.C!=B.A :dp[3][6]=max(dp[3][5],dp[2][6])=max(2,2)=2 删除Y

    (4):i=4

        j=1 X.B==Y.B :dp[4][1]=dp[3][0]+1=1 删除X,Y

        j=2 X.B!=Y.D :dp[4][2]=max(dp[4][1],dp[3][2])=max(1,2)=2 删除X

        j=3 X.B!=Y.C :dp[4][3]=max(dp[4][2],dp[3][3])=max(1,2)=2 删除X

        j=4 X.B!=B.A :dp[4][4]=max(dp[4][3],dp[3][4])=max(2,2)=2 删除Y

        j=5 X.B==B.B :dp[4][5]=dp[3][4]+1=3 删除X,Y

        j=6 X.B!=B.A :dp[4][6]=max(dp[4][5],dp[3][6])=max(3,2)=3 删除Y

    (5):i=5

        j=1 X.D!=Y.B :dp[5][1]=max(dp[5][0],dp[4][1])=max(0,1)=1 删除X

        j=2 X.D==Y.D :dp[5][2]=dp[4][1]+1=2 删除X,Y

        j=3 X.D!=Y.C :dp[5][3]=max(dp[5][2],dp[4][3])=max(2,2)=2 删除Y

        j=4 X.D!=B.A :dp[5][4]=max(dp[5][3],dp[4][4])=max(2,2)=2 删除Y

        j=5 X.D!=B.B :dp[5][5]=max(dp[5][4],dp[4][5])=max(2,3)=3 删除X

        j=6 X.D!=B.A :dp[5][6]=max(dp[5][5],dp[4][6])=max(3,3)=3 删除Y

    (6):i=6

        j=1 X.A!=Y.B :dp[6][1]=max(dp[5][0],dp[5][1])=max(0,1)=1 删除X

        j=2 X.A!=Y.D :dp[6][2]=max(dp[6][1],dp[5][2])=max(1,2)=2 删除X

        j=3 X.A!=Y.C :dp[6][3]=max(dp[6][2],dp[5][3])=max(2,2)=2 删除Y

        j=4 X.A==B.A :dp[6][4]=dp[5][3]+1=3 删除X,Y

        j=5 X.A!=B.B :dp[6][5]=max(dp[6][4],dp[5][5])=max(3,3)=3 删除Y

        j=6 X.A==B.A :dp[6][6]=dp[5][5]+1=4 删除X,Y

    (7):i=7

        j=1 X.B==Y.B :dp[7][1]=dp[6][0]+1=1 删除X,Y

        j=2 X.B!=Y.D :dp[7][2]=max(dp[7][1],dp[6][2])=max(1,2)=2 删除X

        j=3 X.B!=Y.C :dp[7][3]=max(dp[7][2],dp[6][3])=max(2,2)=2 删除Y

        j=4 X.B!=B.A :dp[7][4]=max(dp[7][3],dp[6][4])=max(2,3)=3 删除X

        j=5 X.B==B.B :dp[7][5]=dp[6][4]+1=4 删除X,Y

        j=6 X.B!=B.A :dp[7][6]=max(dp[7][5],dp[6][6])=max(4,4)=4 删除Y

    //

    j/i 0 1 2 3 4 5 6 7      //X:删除 X ;Y:删除 Y ;A:删除X,Y

    0   0 0 0 0 0 0 0 0

    1   0 Y A X A X X A

    2   0 Y Y Y X A X X

    3   0 Y Y A X Y Y Y

    4   0 A Y Y Y Y A X

    5   0 Y A Y A X Y A

    6   0 A Y Y Y Y A Y

    // 输出子串

    (1)

        (7,6) 查表删除 Y

        X:ABCBDAB

        Y:BDCAB

        (7,5) 查表删除 X,Y;

        X:ABCBDA

        Y:BDCA

        (6,4) 查表删除X,Y

        X:ABCBD

        Y:BDC

        (5,3) 查表删除Y

        X:ABCBD

        Y:BD

        (5,2) 查表删除X,Y

        X:ABCB

        Y:B

        (4,1) 查表删除X,Y

        X:ABC

        Y:

        (3,0) 算法结束 输出 BDAB

    0/1背包:

    0/1背包:

    n=5 V=10

    w1=1 w2=2 w3=3 w4=4 w5=5

    v1=5 v2=4 v3=3 v4=2 v1=1

     

    (1) i=1

        j=10 : dp[10]=max(dp[10],dp[10-5]+w[1])=max(0,1)=1;

        j=9  : dp[9]=max(dp[9],dp[9-5]+w[1])=max(0,1)=1;

        j=8  : dp[8]=max(dp[8],dp[8-5]+w[1])=max(0,1)=1;

        j=7  : dp[7]=max(dp[7],dp[7-5]+w[1])=max(0,1)=1;

        j=6  : dp[6]=max(dp[6],dp[6-5]+w[1])=max(0,1)=1;

        j=5  : dp[5]=max(dp[5],dp[5-5]+w[1])=max(0,1)=1;

    (2) i=2

        j=10 : dp[10]=max(dp[10],dp[10-4]+w[2])=max(1,3)=3;

        j=9  : dp[9]=max(dp[9],dp[9-4]+w[2])=max(1,3)=3;

        j=8  : dp[8]=max(dp[8],dp[8-4]+w[2])=max(1,2)=2;

        j=7  : dp[7]=max(dp[7],dp[7-4]+w[2])=max(1,2)=2;

        j=6  : dp[6]=max(dp[6],dp[6-4]+w[2])=max(1,2)=2;

        j=5  : dp[5]=max(dp[5],dp[5-4]+w[2])=max(1,2)=2;

        j=4  : dp[4]=max(dp[4],dp[4-4]+w[2])=max(0,2)=2;

    (3) i=3

        j=10 : dp[10]=max(dp[10],dp[10-3]+w[3])=max(2,5)=5;

        j=9  : dp[9]=max(dp[9],dp[9-3]+w[3])=max(3,5)=5;

        j=8  : dp[8]=max(dp[8],dp[8-3]+w[3])=max(2,5)=5;

        j=7  : dp[7]=max(dp[7],dp[7-3]+w[3])=max(2,5)=5;

        j=6  : dp[6]=max(dp[6],dp[6-3]+w[3])=max(2,3)=3;

        j=5  : dp[5]=max(dp[5],dp[5-3]+w[3])=max(2,3)=3;

        j=4  : dp[4]=max(dp[4],dp[4-3]+w[3])=max(0,3)=3;

        j=3  : dp[3]=max(dp[3],dp[3-3]+w[3])=max(0,3)=3;

    (4) i=4

        j=10 : dp[10]=max(dp[10],dp[10-2]+w[4])=max(5,9)=9;

        j=9  : dp[9]=max(dp[9],dp[9-2]+w[4])=max(5,9)=9;

        j=8  : dp[8]=max(dp[8],dp[8-2]+w[4])=max(5,7)=7;

        j=7  : dp[7]=max(dp[7],dp[7-2]+w[4])=max(5,7)=7;

        j=6  : dp[6]=max(dp[6],dp[6-2]+w[4])=max(3,7)=7;

        j=5  : dp[5]=max(dp[5],dp[5-2]+w[4])=max(3,7)=7;

        j=4  : dp[4]=max(dp[4],dp[4-2]+w[4])=max(3,4)=4;

        j=3  : dp[3]=max(dp[3],dp[3-2]+w[4])=max(3,4)=4;

        j=2  : dp[2]=max(dp[2],dp[2-2]+w[4])=max(0,4)=4;

    (5) i=5

        j=10 : dp[10]=max(dp[10],dp[10-1]+w[5])=max(9,14)=14;

        j=9  : dp[9]=max(dp[9],dp[9-1]+w[5])=max(9,14)=14;

        j=8  : dp[8]=max(dp[8],dp[8-1]+w[5])=max(7,12)=12;

        j=7  : dp[7]=max(dp[7],dp[7-1]+w[5])=max(7,12)=12;

        j=6  : dp[6]=max(dp[6],dp[6-1]+w[5])=max(7,12)=12;

        j=5  : dp[5]=max(dp[5],dp[5-1]+w[5])=max(7,12)=12;

        j=4  : dp[4]=max(dp[4],dp[4-1]+w[5])=max(4,9)=9;

        j=3  : dp[3]=max(dp[3],dp[3-1]+w[5])=max(4,9)=9;

        j=2  : dp[2]=max(dp[2],dp[2-1]+w[5])=max(4,9)=9;

        j=1  : dp[1]=max(dp[1],dp[1-1]+w[5])=max(0,5)=5;

     

    dp[10]=14

    3. 设计

    LCS:

     

    0/1背包:

    For i=1 to N

    For j=V to v[i]

    Dp[j]=max(dp[j-v[i]]+w[i],dp[j])

    4. 分析

    LSC:O(n*m)

    0/1背包:O(n*V)

    5. 源码

    https://github.com/xiaojunjun601/sfHomework1/tree/master/%E4%BB%A3%E7%A0%81

  • 相关阅读:
    Luogu P1962 斐波那契数列
    Luogu P2370 yyy2015c01的U盘
    Luogu P2678跳石头
    POJ3111 K Best
    表单内容相关操作
    框架集与框架.
    spring aop的使用
    sql查询的优化(六)
    mysql数据库视图(五)
    mysql数据库索引(四)
  • 原文地址:https://www.cnblogs.com/zpj61/p/14753303.html
Copyright © 2011-2022 走看看