动态规划算法问题分析_背包问题_求相隔数据之间最大和_算法理解
动态规划如何选取一维数组还是二维数组
总结:
* 当题目种涉及到两个变量时需要借助二维数组来实现动态规划,例如 背包问题中,涉及容量和重量两个变量,则需要两个维度来考虑
* 当题目中只有一个变量时,使用一维数组解决动态规划问题,例如相隔数据和最大,变的只是数据的和,因此只设置一个一维数组用于存放数据和即可
举例:
背包问题:使用二维数组,将每次的结果保存于二维数组中,求解的下一个结果依赖于上次已经求好的结果,最终结果就在二维数组的右下角
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,辅助变量的最后一个值便为最终答案。
动态规划算法问题分析_背包问题_求相隔数据之间最大和_算法理解相关推荐
- 袋装决策树_袋装树是每个数据科学家需要的机器学习算法
袋装决策树 袋装树木介绍 (Introduction to Bagged Trees) Without diving into the specifics just yet, it's importa ...
- jqgrid为什么表头和数据之间有间隙_面试官:你看过Redis数据结构底层实现吗?...
面试中,redis也是很受面试官亲睐的一部分.我向在这里讲的是redis的底层数据结构,而不是你理解的五大数据结构.你有没有想过redis底层是怎样的数据结构呢,他们和我们java中的HashMap. ...
- python怎么分析数据差异的方法_如何比较两组数据之间的差异性
展开全部 1, 首先,分别把这两组数据分别设为x和y,打开SPSS,点击左下角的Variable View选项卡,e5a48de588b6323131333532363134313032313635 ...
- 思博伦Spirent Testcenter交换机性能测试主要技术指标_丢帧率/吞吐量/转发速率之间的关系_双极未来
转发速率.丢帧率和吞吐量是描述交换机转发性能的主要技术指标,这些指标的测试结果可以客观地反映出被测交换机的性能.正确理解它们之间的联系与区别对于设计吞吐量.丢帧率和转发速率的测试方法非常重要. 如下图 ...
- 数据分析师 需求分析师_是什么让分析师出色?
数据分析师 需求分析师 重点 (Top highlight) Before we dissect the nature of analytical excellence, let's start wi ...
- 提高机器学习质量的想法_如何提高机器学习的数据质量?
提高机器学习质量的想法 The ultimate goal of every data scientist or Machine Learning evangelist is to create a ...
- 平台api对数据收集的影响_收集您的数据不是那么怪异的api
平台api对数据收集的影响 A data analytics cycle starts with gathering and extraction. I hope my previous blog g ...
- 数据科学学习心得_学习数据科学时如何保持动力
数据科学学习心得 When trying to learn anything all by yourself, it is easy to lose motivation and get thrown ...
- 数据治理 主数据 元数据_我们对数据治理的误解
数据治理 主数据 元数据 Data governance is top of mind for many of my customers, particularly in light of GDPR, ...
最新文章
- C++中文转码问题(GB2312 - UTF8)
- 全面掌握ISO8583报文协议
- 25个Java机器学习工具库--转载
- 宿舍助手app——个人工作第四天
- python 蓝牙模块pybluz安装
- ie6 css padding,IE6padding的一个影响布局的问题在
- Vue开启Gzip打包异常:webpack打包报错Cannot read property ‘emit‘ of undefined
- Spring IOC核心原理分析
- 外媒揭晓华为Mate 30 Pro配置细节:新iPhone最大的对手
- 查看oracle资源使用情况,Oracle查询表空间使用情况
- 高评分防火墙GlassWire:帮你监控、追踪和提升电脑安全
- Python 3.x对.CSV数据按任意行、列读取
- 果真A站完了是B站,B站后台工程源码疑似泄露,已被GitHub删除!
- Fisher精确检验与卡方检验
- 基于微信小程序的点餐系统设计毕业设计论文
- android wear2.0 更新,又一批手表获得Android Wear 2.0更新
- 火焰传感器的简单使用
- 腾达f6虚拟服务器,腾达(Tenda)F6路由器无线wifi设置
- MySQL 批量插入数据,一次插入多少行数据效率最高?
- Java简单日记本项目