当前位置: 首页 > news >正文

算法体系-20 第二十节暴力递归到动态规划

前言 动态规划模型从尝试暴力递归到傻缓存到动态规划

四种模型和体系班两种模型一共六种模型

0.1 从左往右模型

0.2 范围讨论模型范围尝试模型 (这种模型特别在乎讨论开头如何如何 结尾如何如何)

玩家博弈问题,玩家玩纸牌只能那左或者右

0.3 样本对应样本对应模型(特别在乎两个样本结尾如何如何 最长公共子序列)

0.4 业务限制模型

动态规划只是暴力尝试的一个缓存
 

1.2 分析

到当前货物的时候有两种选择,要么选择当前货物,要么不选择当前货物

base 条件的判断分析

if (rest < 0) {

return -1;}

这里为什么不能取return 0,因为上由传下来的剩下的bags的重量要大于0上由的值才是有意义的;

递归改动态规划

第一步找确定的值

if (index == w.length) {

return 0;

}

第二步找动态的值喝确定值之间的关系,动态的值时如何根据静态值退出来的

int p1 = process(w, v, index + 1, rest);

int next = process(w, v, index + 1, rest - w[index]);

这辆动态函数都需要依赖他的一行,最后一行又是确定值

1.3 尝试递归代码

// 所有的货,重量和价值,都在w和v数组里// 为了方便,其中没有负数// bag背包容量,不能超过这个载重// 返回:不超重的情况下,能够得到的最大价值public static int maxValue(int[] w, int[] v, int bag) {if (w == null || v == null || w.length != v.length || w.length == 0) {return 0;}// 尝试函数!return process(w, v, 0, bag);}// index 0~N// rest 负~bagpublic static int process(int[] w, int[] v, int index, int rest) {if (rest < 0) {return -1;}if (index == w.length) {return 0;}//不选择当前的货物int p1 = process(w, v, index + 1, rest);int p2 = 0;//要选择当前的货物int next = process(w, v, index + 1, rest - w[index]);if (next != -1) {p2 = v[index] + next;}return Math.max(p1, p2);}

1.4 改动态规划

递归改动态规划

第一步找确定的值

第二步找动态的值喝确定值之间的关系,动态的值时如何根据静态值退出来的

改动态规划 看是否有重复的情况

下面的p(3,10)都会重复

1.5 动态规划代码

public static int dp(int[] w, int[] v, int bag) {if (w == null || v == null || w.length != v.length || w.length == 0) {return 0;}int N = w.length;int[][] dp = new int[N + 1][bag + 1];for (int index = N - 1; index >= 0; index--) {for (int rest = 0; rest <= bag; rest++) {int p1 = dp[index + 1][rest];int p2 = 0;int next = rest - w[index] < 0 ? -1 : dp[index + 1][rest - w[index]];if (next != -1) {p2 = v[index] + next;}dp[index][rest] = Math.max(p1, p2);}}return dp[0][bag];}public static void main(String[] args) {int[] weights = { 3, 2, 4, 7, 3, 1, 7 };int[] values = { 5, 6, 3, 19, 12, 4, 2 };int bag = 15;System.out.println(maxValue(weights, values, bag));System.out.println(dp(weights, values, bag));}}

http://www.lryc.cn/news/371184.html

相关文章:

  • 字符集相关变量理解
  • 618哪些数码产品比较好?2024超高人气产品推荐!
  • 基础-01-计算机网络概论
  • STM32学习笔记(一)--时钟树详解
  • JAVA小知识16:JAVA常用的API
  • PaddleDetection快速体验quick_start
  • 《Foundation CSS 参考手册》
  • 方法递归-结合案例阶乘问题、求和问题和猴子吃桃问题
  • 有一个主域名跟多个二级子域名时该怎么申请SSL证书?
  • LabVIEW伺服电机可应用在哪些领域
  • nvidia 显卡 没有正确安装或配置 OpenGL 库
  • 将自己md文件发布到自己的博客园实现文件的持久化存储
  • uni-app的生命周期(应用,页面生命周期)
  • 响应式企业网站建站系统源码 模版丰富+一站式建站 全开源可二次开发 带源码包+搭建部署教程
  • 如何解除内存卡的写保护并格式化为exFAT文件系统
  • 【 EI会议 | 西南大学主办 | 往届均已实现检索】第三届神经形态计算国际会议(ICNC 2024)
  • 利用python爬虫采集苹果公司各产品销售收入统计报告
  • ethercat igh可能出现的两个bug
  • 计算机网络知识点(三)
  • 关于认证协议
  • C#操作MySQL从入门到精通(20)——更新数据
  • NVMe全闪存储系统性能测试及产品功能与应用场景
  • C#面:C#面向对象的思想主要包括什么?
  • 海南云亿商务咨询有限公司正规吗?怎么样?
  • 【数据结构】排序(上)
  • vue3+el-plus对eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽):
  • Nginx如何隐藏版本号
  • 用C#(WinForm)开发触摸屏,体验感满满
  • LaneKeepingEnv(自动驾驶仿真)
  • C++类与对象(拷贝与类的内存管理)