码迷,mamicode.com
首页 > 编程语言 > 详细

算法分析与设计实验报告 Project9

时间:2021-06-18 18:59:30      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:for   一个   details   body   pre   阶段   过程   art   状态   

实验报告
课程名称
学生姓名
实验名称
实验地点
1.
LCS问题:
给定两个字符串,求两个字符串的最长公共子序列
背包问题:
此处应指01背包问题
给定n个物品,每个物品具有价值和重量两个属性。
求在限定的重量V的背包中装入尽可能多的物品以达到最大的价值
2.
这两个问题都是动态规划中的经典问题
LCS:
01背包:
LCS举例:
i = 1,j = 1
a[i] = a,b[j] = b
dp[1][1] 更新为 0
i = 1,j = 2
a[i] = a,b[j] = b
dp[1][2] 更新为 0
i = 1,j = 3
a[i] = a,b[j] = c
dp[1][3] 更新为 0
i = 1,j = 4
a[i] = a,b[j] = a
此时发现a[i] == b[j]
dp[1][4] 更新为 1
i = 2,j = 1
a[i] = b,b[j] = b
此时发现a[i] == b[j]
dp[2][1] 更新为 1
i = 2,j = 2
a[i] = b,b[j] = b
此时发现a[i] == b[j]
dp[2][2] 更新为 1
i = 2,j = 3
a[i] = b,b[j] = c
dp[2][3] 更新为 1
i = 2,j = 4
a[i] = b,b[j] = a
dp[2][4] 更新为 1
i = 3,j = 1
a[i] = c,b[j] = b
dp[3][1] 更新为 1
i = 3,j = 2
a[i] = c,b[j] = b
dp[3][2] 更新为 1
i = 3,j = 3
a[i] = c,b[j] = c
此时发现a[i] == b[j]
dp[3][3] 更新为 2
i = 3,j = 4
a[i] = c,b[j] = a
dp[3][4] 更新为 2
i = 4,j = 1
a[i] = d,b[j] = b
dp[4][1] 更新为 1
i = 4,j = 2
a[i] = d,b[j] = b
dp[4][2] 更新为 1
i = 4,j = 3
a[i] = d,b[j] = c
dp[4][3] 更新为 2
i = 4,j = 4
a[i] = d,b[j] = a
dp[4][4] 更新为 2
背包问题举例:
输入:
3 70
71 100
69 1
1 2
考虑加入第一个物品,由于容量只有70,71已经超出了70,此时第二重的循环并不会执行
考虑加入第二个物品,从69开始执行,此时表示前两物品,不超过69的最大价值,此时显然加入要比当前不加入要好(不加入为0),于是DP[2][69]更新为1。继续循环,此时表示前两个物品,不超过70的最大价值,显然也比不加入好(不加入为0) 于是DP[2][70] = 1
考虑加入第三个物品,其重量为1,从1开始循环,和上一次类似地,到70之前都会考虑加入物品,当最后一次发现恰好可以从DP[2][69]得到转换一,与是得到DP[3][70] = DP[2][69] + 1 = 3
一点优化:01背包的第一维只和上一个阶段的状态有关,于是可以用滚动数组使空间复杂度优化到O(M)
3.
LCS:
/* 假设X长度m<=Y长度n */
LCS-LENGTH(X, Y)
m <- X.length
n <- Y.length
let c[m] be new table
/* pre记录被前一个覆盖的值 */
pre <- 0
for i<-1 to n do
return c[m]
————————————————
版权声明:本文为CSDN博主「THOOOR」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/THOOOR/article/details/105555841
01背包:
4.
LCS:容易发现LCS算法会严格地跑满两重循环
于是时间复杂度O(NM) 空间复杂度相同
01背包:一共要枚举N个物品,每次枚举到背包的容量
因此复杂度O(NM) 实际过程中会有许多无用状态
空间复杂度可以用滚动数组优化为O(M)
5.
Algorithm-Class-codes/project9 : LCS at main · MQFLLY/Algorithm-Class-codes (github.com)
Algorithm-Class-codes/project9; 01Packing at main · MQFLLY/Algorithm-Class-codes (github.com)

算法分析与设计实验报告 Project9

标签:for   一个   details   body   pre   阶段   过程   art   状态   

原文地址:https://www.cnblogs.com/hznumqf/p/14896925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!