动态规划如何选取一维数组还是二维数组

总结:
* 当题目种涉及到两个变量时需要借助二维数组来实现动态规划,例如 背包问题中,涉及容量和重量两个变量,则需要两个维度来考虑
* 当题目中只有一个变量时,使用一维数组解决动态规划问题,例如相隔数据和最大,变的只是数据的和,因此只设置一个一维数组用于存放数据和即可
举例:
背包问题:使用二维数组,将每次的结果保存于二维数组中,求解的下一个结果依赖于上次已经求好的结果,最终结果就在二维数组的右下角

private static int dp_OPT(int n, int v) {// n为当前物品,v为当前剩余容量int[][] result = new int[weight.length][v + 1];// 创造一个二维数组,用于存放各种情况对应的最优解,行数表示保存第几个物品,列数保存背包容量// 二维数组的第0行0列都是0,故二维数组的列数应该为v+1(weight数组已经将第一个元素设置为0)// 二维数组的行数 = 数组名.length,列数=数组名[0].length;for (int i = 0; i < result[0].length; i++) {result[0][i] = 0;}for (int i = 0; i < result.length; i++) {result[i][0] = 0;}for (int i = 1; i < result.length; i++) {for (int j = 1; j < result[0].length; j++) {// j >= weight[i] 当前容量是否可以放下物品i// 当能容下物品i时,如果选i : value[i] + result[i-1][j-weight[i]] 即当前物品i的价值+前i-1个物品的最大价值//当容量不足以装下i时,则最大价值为前i-1个物品的最大价值,即result[i-1][j].result[i][j] = j >= weight[i] ? Math.max(value[i] + result[i - 1][j - weight[i]], result[i - 1][j]): result[i - 1][j];}}return result[n][v];}

求相隔数据最大数据和

private static int dp_OPT(int[] data,int i) {int [] opt = new int[data.length]; //借助一维数组存放最优解int A,B;opt[0] = data[0];opt[1] = Math.max(data[0], data[1]);//排除特殊情况for (int j = 2; j < data.length; j++) {A = opt[j-2] + data[j];//选JB = opt[j-1];//不选Jopt[j] = Math.max(A, B);}return opt[i];}

注意
关于动态规划问题有两种实现方法,一种是递归解决,另一种是非递归解决,递归解决往往时间复杂度较高,非递归解决则是采用空间换时间的策略。
对于递归式解法:数据从后向前,假设最大数据为n ,则依次计算n-1,n-2,…,1
非递归式采用的辅助变量(一维数组或二维数组)则是从前向后,假设最大数据为n ,则依次为1,2,3,…,n,辅助变量的最后一个值便为最终答案。

动态规划算法问题分析_背包问题_求相隔数据之间最大和_算法理解相关推荐

  1. 袋装决策树_袋装树是每个数据科学家需要的机器学习算法

    袋装决策树 袋装树木介绍 (Introduction to Bagged Trees) Without diving into the specifics just yet, it's importa ...

  2. jqgrid为什么表头和数据之间有间隙_面试官:你看过Redis数据结构底层实现吗?...

    面试中,redis也是很受面试官亲睐的一部分.我向在这里讲的是redis的底层数据结构,而不是你理解的五大数据结构.你有没有想过redis底层是怎样的数据结构呢,他们和我们java中的HashMap. ...

  3. python怎么分析数据差异的方法_如何比较两组数据之间的差异性

    展开全部 1, 首先,分别把这两组数据分别设为x和y,打开SPSS,点击左下角的Variable  View选项卡,e5a48de588b6323131333532363134313032313635 ...

  4. 思博伦Spirent Testcenter交换机性能测试主要技术指标_丢帧率/吞吐量/转发速率之间的关系_双极未来

    转发速率.丢帧率和吞吐量是描述交换机转发性能的主要技术指标,这些指标的测试结果可以客观地反映出被测交换机的性能.正确理解它们之间的联系与区别对于设计吞吐量.丢帧率和转发速率的测试方法非常重要. 如下图 ...

  5. 数据分析师 需求分析师_是什么让分析师出色?

    数据分析师 需求分析师 重点 (Top highlight) Before we dissect the nature of analytical excellence, let's start wi ...

  6. 提高机器学习质量的想法_如何提高机器学习的数据质量?

    提高机器学习质量的想法 The ultimate goal of every data scientist or Machine Learning evangelist is to create a ...

  7. 平台api对数据收集的影响_收集您的数据不是那么怪异的api

    平台api对数据收集的影响 A data analytics cycle starts with gathering and extraction. I hope my previous blog g ...

  8. 数据科学学习心得_学习数据科学时如何保持动力

    数据科学学习心得 When trying to learn anything all by yourself, it is easy to lose motivation and get thrown ...

  9. 数据治理 主数据 元数据_我们对数据治理的误解

    数据治理 主数据 元数据 Data governance is top of mind for many of my customers, particularly in light of GDPR, ...

最新文章

  1. C++中文转码问题(GB2312 - UTF8)
  2. 全面掌握ISO8583报文协议
  3. 25个Java机器学习工具库--转载
  4. 宿舍助手app——个人工作第四天
  5. python 蓝牙模块pybluz安装
  6. ie6 css padding,IE6padding的一个影响布局的问题在
  7. Vue开启Gzip打包异常:webpack打包报错Cannot read property ‘emit‘ of undefined
  8. Spring IOC核心原理分析
  9. 外媒揭晓华为Mate 30 Pro配置细节:新iPhone最大的对手
  10. 查看oracle资源使用情况,Oracle查询表空间使用情况
  11. 高评分防火墙GlassWire:帮你监控、追踪和提升电脑安全
  12. Python 3.x对.CSV数据按任意行、列读取
  13. 果真A站完了是B站,B站后台工程源码疑似泄露,已被GitHub删除!
  14. Fisher精确检验与卡方检验
  15. 基于微信小程序的点餐系统设计毕业设计论文
  16. android wear2.0 更新,又一批手表获得Android Wear 2.0更新
  17. 火焰传感器的简单使用
  18. 腾达f6虚拟服务器,腾达(Tenda)F6路由器无线wifi设置
  19. MySQL 批量插入数据,一次插入多少行数据效率最高?
  20. Java简单日记本项目

热门文章

  1. javascript 在页面显示xxxx年xx月xx日
  2. java 日历控件_java swing 日历控件怎么实现 最好是源码
  3. PyCharm中import显示灰色解决方案
  4. linux openssh打补丁,OpenSSH 服务器的 20 个最佳实践–手工升级、打补丁
  5. 夜深了 是时候爬个小黄图了
  6. 说一说要求 小程序自定义导航栏 的需求有多沙雕
  7. 带你探索元宇宙鲜为人知的另一面
  8. 稳定的将一台空间爆满的iPhone手机上的照片导出到Windows10电脑上
  9. socket网络编程封装错误处理函数
  10. 谁不曾辜负或被辜负?