首页 > 编程语言 >中电金信:技术浅谈 | 动态规划算法的原理和实现

中电金信:技术浅谈 | 动态规划算法的原理和实现

时间:2024-03-22 14:57:55浏览次数:34  
标签:问题 背包 浅谈 金信 算法 物品 动态 规划

导语:动态规划(Dynamic programming)是一种在数学、计算机科学和经济学中使用的方法。动态规划算法与分治法类似,通过将带求解的问题分解为若干个相对简单的子问题(阶段)的方式,来求解复杂问题。本文作者用相对精炼的篇幅内容对动态规划算法进行背景及原理介绍,并举例说明如何进行问题分解和求解答案,与各位读者共同探讨分享。

 

 

01|问题背景

 

在日常生活中,我们可能经常会遇到这样的问题:用100块钱去买10件东西,怎样买会比较合适?将其抽象化就能得到经典的篮子问题——

 

假设我们有n种类型的物品,编号分别为1、2、...n,其中编号为i的物品价值为vi,它的价值为wi。在这里设定价值和重量都是整数。现在假设我们有一个背包,怎样才能在不超过背包容量的情况下放入价值最大化的物品?

 

解决这个问题有两个思路:

 

■ 第一种是穷举法,列举出所有的可能,选择其中的最优解;

 

■ 第二种是动态规划算法,将大问题拆分为小问题,我们只考虑每一件物品放或者不放,然后循环计算所有的物品放置或者不放置后的价值,最后得到最优的结果。

 

 

02|基本原理

 

动态规划算法是最优化算法中的一种,其基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解里面得到原问题的解。

 

动态规划的基本过程可以分为以下几步:

 

A. 划分状态,即划分子问题

B. 状态表示,即用数学的方法将问题抽象出来

C. 状态转移,即子问题之间是如何进行流转的

D. 确定边界,即初始状态和最终状态应该如何确定

 

 

03|算法详解

 

下面我们按照上面动态规划的基本流程来进行篮子问题的解析。首先,将问题抽象成数学表达式,进行如下规定:

 

A. 

图片​代表第i件物品,空间容量为j时背包中的最大价值

B. 图片代表第i件物品的价值

 

 

其次,按照动态规划的过程进行问题分解:

 

A. 划分状态:当背包中放入物品i时,背包内的最大价值为多少

B. 状态表示:即抽象出的数学公式,

图片​代表当前背包容量为j时的最大价值

C. 状态转移:背包问题中,状态转移即为不同物品放入其中

D. 确定边界:初始情况下

图片​应该全部为0

 

解析完篮子问题后,得到算法如下所示:

 

图片

 

04|实例说明

 

接下来,我们再用实际的例子以及图标来解释上面算法的流程。

 

比如有三件物品,分别是:

 

A. 书本(体积为3,价值为300)

B. 笔筒(体积为2,价值为200)

C. 橡皮(体积为2,价值为100)

 

另外,背包体积为6,带入算法公式,结果如图所示:

 

图片

 

各个颜色表示最优方案,其中:

 

A. 白块表示初始化区域

B. 绿块表示不取物品最大

C. 红块表示取物品时最大

 

分析可知:当书本和笔筒放入背包时,能够价值最大化,橡皮一直是绿色的,说明没有被取到。

 

05|总结

 

篮子问题只是动态算法的一个应用,上面的算法也只是动态规划算法的一种,关键是要理解动态规划算法的精髓,学会分析复杂的问题,最终实现将问题大而化小,小而化了。

 

 

 

 

标签:问题,背包,浅谈,金信,算法,物品,动态,规划
From: https://www.cnblogs.com/zhongdianjinxin/p/18089468

相关文章

  • 代码随想录算法训练营第五十四天 | 115.不同的子序列,392.判断子序列
    392.判断子序列 已解答简单 相关标签相关企业 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不......
  • 算法练习Day04
    有hr说什么现在软件谁还用c++,都是rust了虽然但是他也太以偏概全了,,((烧饼吧1.两两交换链表中的节点思路:将链表中相邻的节点两两交换,则交换的步骤是eg:[0]->[1]->[2]->[3]->[4]交换1和2,3和4;则交换的步骤是,先让0指向2,再让2指向1,最后让1指向3,即完成了一次交换;此时需要......
  • 最新abogus算法还原之传参加密
    本文只是我简要的分析过程,以及一些重要点的记录,不涉及核心算法  一、网站aHR0cHM6Ly9idXlpbi5qaW5yaXRlbWFpLmNvbS9kYXNoYm9hcmQvbWVyY2gtcGlja2luZy1saWJyYXJ5base64解密即可,需要登录二、定位参数直接从启动器追踪或者根据url参数定位最后定位到bdms.js文件......
  • 浅谈MySQL中的外键、索引和性能优化
    当我们讨论MySQL中的外键、索引和优化时,我们通常指的是为了提高数据库查询效率、数据完整性和整体性能而采取的一系列措施。1.外键(ForeignKeys)定义:外键是一个字段,它在一个表中引用另一个表的主键。外键用于确保数据引用完整性和在两个表之间建立关系。举例:假设......
  • 数据结构与算法设计
    前言最近在复习数据结构,两年前曾经阅读过大量相关书籍,包括各种算法入门书和一些游戏逻辑代码。当时自认为花了大量时间理解排序算法的逻辑,但是要自己复述仍然存在困难,做题数目也偏少,说明并没有纳入自己的知识体系。但存在一个问题是,没有自己动手写大量的程序,只是短时间(半个月)内......
  • 算法文章中涉及的若干基础类的主要API
    本文记述了笔者所写算法文章中涉及的若干基础类的主要API(部分参考算法:第4版/(美)塞奇威客(Sedgewick,R.),(美)韦恩(Wayne,K.)著;谢路云译.--北京:人民邮电出版社,2012.10(2021.5重印)实现,包括顺序存储结构、基础类的包装类、随机数、标准输入输出等。◆......
  • 代码随想录算法训练营第十七天| 110. 平衡二叉树 257. 二叉树的所有路径 404. 左叶
    110.平衡二叉树https://leetcode.cn/problems/balanced-binary-tree/description/publicbooleanisBalanced(TreeNoderoot){intbalance=balance(root);returnbalance==-1?false:true;}publicintbalance(TreeNodenode){i......
  • 新能源汽车充电桩站点烟火AI识别检测算法应用方案
    新能源汽车作为现代科技与环保理念的完美结合,其普及和应用本应带给人们更加便捷和绿色的出行体验。然而,近年来新能源汽车充电火灾事故的频发,无疑给这一领域投下了巨大的阴影。这不禁让人深思,为何这一先进的交通工具在充电过程中会引发火灾事故。从技术层面来看,新能源汽车的充电系......
  • TSINGSEE青犀AI智能分析网关V4的人员摔倒检测算法及应用
    人员摔倒检测AI算法是一种基于计算机视觉和机器学习的技术,它通过对视频或图像中的人员运动进行分析,自动检测并识别出摔倒事件。该算法采用了多种技术手段,包括深度学习、目标跟踪、姿态估计等,以实现高效、准确的摔倒检测。今天我们来介绍下TSINGSEE青犀AI智能分析网关V4的人员摔倒......
  • 雪花算法生成分布式序列号
    packageio.binghe.seckill.infrastructure.utils.id;importjava.util.Date;publicclassSnowFlake{/***起始的时间戳:2023-04-1913:42:00,使用时此值不可修改*/privatefinalstaticlongSTART_STMP=1681882920782L;/***每一部分......