最常公共子序列
算法原理
代码 最常公共子序列.js
var f = longCommonSubsequence("abcde", "ace"); console.log(f); function longCommonSubsequence(text1, text2) { let m = text1.length; let n = text2.length; let f = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0)); console.log(f); for (i = 1; i <= m; i++) { let a1 = text1[i - 1]; for (j = 1; j <= n; j++) { let a2 = text2[j - 1]; if (a1 === a2) { f[i][j] = f[i - 1][j - 1] + 1; } else { f[i][j] = Math.max(f[i - 1][j], f[i][j - 1]); } } } return f; }
01背包问题
算法原理
原理图
视频讲解
代码
代码目录
-
前i -1个物品的组合价值
-
仍然是前i-1个物品的组合价值,准确的说去掉当前物品容量的前i-1个物品的组合价值
-
加上当前物品的价值
var dp = backPack( [ [2, 3], [3, 4], [4, 5], [5, 6], ], 8 ); console.log(dp); function backPack(arr, capacity) { let [weight, value] = arr[0]; // m表示背包中物品的数量 let m = arr.length; let dp = new Array(m + 1).fill(0).map(() => new Array(capacity + 1).fill(0)); for (i = 1; i <= m; i++) { let [weight, value] = arr[i - 1]; for (j = 1; j <= capacity; j++) { if (weight > j) { dp[i][j] = dp[i - 1][j]; } else { // 不放当前物品,就是前n个物品的最佳组合 // 放当前物品,就是背包容量减去当前物品重量,即 j - weight // 然后再加上物品的价值,即 + value dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight] + value); } } } return dp; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!