怪物奇妙物语

宇宙无敌超级美少男的怪物奇妙物语

首页 新随笔 联系 管理
  822 随笔 :: 0 文章 :: 2 评论 :: 16万 阅读

最常公共子序列

算法原理

代码 最常公共子序列.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背包问题

算法原理

原理图

image-20211123233552620

image-20211123233625531

视频讲解


代码

代码目录

01背包问题.html

  1. 前i -1个物品的组合价值

    image-20211123234203635

  2. 仍然是前i-1个物品的组合价值,准确的说去掉当前物品容量的前i-1个物品的组合价值

    image-20211123234347845

  3. 加上当前物品的价值

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;
}

输出效果

image-20211123233825713

posted on   超级无敌美少男战士  阅读(66)  评论(0编辑  收藏  举报
编辑推荐:
· 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框架的用法!
点击右上角即可分享
微信分享提示