新闻详情

新闻详情

首页 / 资讯中心 / 详情

动态规划:从递归到最优决策的算法艺术

发布时间:2026/10/1 16:13:51来源:尧图网络
动态规划:从递归到最优决策的算法艺术
动态规划Dynamic Programming简称 DP并非某种具体的算法而是一种将复杂问题分解为简单子问题、并通过存储子问题的解来避免重复计算的算法设计思想。其核心哲学在于用空间换时间解决那些具有最优子结构和重叠子问题特性的难题。不同于贪心算法的局部最优选择动态规划通过穷举所有可能的决策路径确保找到全局最优解。要理解动态规划不妨从最朴素的递归说起。以经典的斐波那契数列为例其数学定义为F(n)F(n−1)F(n−2)F(n) F(n-1) F(n-2)F(n)F(n−1)F(n−2)其中F(0)0,F(1)1F(0)0, F(1)1F(0)0,F(1)1。若直接翻译为递归代码我们会发现计算过程产生了指数级的冗余运算。例如在计算F(5)F(5)F(5)时F(3)F(3)F(3)被重复计算了多次。这种重叠子问题现象导致了巨大的性能浪费。动态规划介入的方式便是引入一个数组dpdpdp来存储已计算的结果这被称为“记忆化搜索”。在正式的文章中我们通常使用“自底向上”的迭代方式来构建 DP。对于斐波那契数列我们定义状态dp[i]dp[i]dp[i]表示第iii个数字的值。状态转移方程为dp[i]dp[i−1]dp[i−2] dp[i] dp[i-1] dp[i-2]dp[i]dp[i−1]dp[i−2]通过初始化dp[0]dp[0]dp[0]和dp[1]dp[1]dp[1]我们可以线性地推导出后续结果。以下是标准的动态规划实现deffibonacci(n:int)-int:ifn1:returnn# 定义 dp 数组dp[0]*(n1)# 初始化边界条件dp[0],dp[1]0,1# 状态转移foriinrange(2,n1):dp[i]dp[i-1]dp[i-2]returndp[n]此代码的时间复杂度为O(n)O(n)O(n)空间复杂度为O(n)O(n)O(n)。进一步观察可以发现dp[i]dp[i]dp[i]仅依赖于前两个状态因此我们可以将空间压缩至O(1)O(1)O(1)deffibonacci_optimized(n:int)-int:ifn1:returnn prev,curr0,1for_inrange(2,n1):prev,currcurr,prevcurrreturncurr动态规划的难点在于状态定义与转移方程的设计。以0-1 背包问题为例这是动态规划中的里程碑式问题。问题描述如下给定nnn个物品每个物品重量为wiw_iwi​价值为viv_ivi​以及一个容量为WWW的背包。求在不超过容量限制的前提下背包能装下的物品最大总价值。我们定义二维状态dp[i][j]dp[i][j]dp[i][j]表示前iii个物品放入容量为jjj的背包中所能获得的最大价值。对于每个物品我们有两种选择放或不放。如果不放则dp[i][j]dp[i−1][j]dp[i][j] dp[i-1][j]dp[i][j]dp[i−1][j]如果放前提是j≥wij \ge w_ij≥wi​则dp[i][j]dp[i−1][j−wi]vidp[i][j] dp[i-1][j-w_i] v_idp[i][j]dp[i−1][j−wi​]vi​。综合二者状态转移方程为dp[i][j]max⁡(dp[i−1][j],dp[i−1][j−wi]vi) dp[i][j] \max(dp[i-1][j], dp[i-1][j-w_i] v_i)dp[i][j]max(dp[i−1][j],dp[i−1][j−wi​]vi​)完整的代码如下defknapsack_01(W,weights,values):nlen(weights)# dp[i][j] 表示前 i 个物品容量为 j 的最大价值dp[[0]*(W1)for_inrange(n1)]foriinrange(1,n1):forjinrange(W1):# 不拿第 i 个物品dp[i][j]dp[i-1][j]# 尝试拿第 i 个物品ifjweights[i-1]:dp[i][j]max(dp[i][j],dp[i-1][j-weights[i-1]]values[i-1])returndp[n][W]同样该问题也可以进行空间优化。由于dp[i]dp[i]dp[i]只依赖于dp[i−1]dp[i-1]dp[i−1]我们可以使用一维数组并从后往前遍历容量jjj以避免数据覆盖。除了背包问题动态规划还广泛应用于字符串处理如最长公共子序列LCS、区间决策如石子合并以及树形结构树形 DP。掌握动态规划的关键在于“勤画表”通过在草稿纸上模拟dpdpdp数组的填充过程往往能直观地发现状态之间的联系。总而言之动态规划不是一蹴而就的技巧而是对问题本质的深度剖析。它要求我们明确“什么是状态”以及“状态如何流转”。当你面对一个问题时若能将其抽象为一个多阶段的决策过程并证明其满足无后效性那么动态规划很可能就是你手中的利刃。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Ever Gauzy MCP Server 桌面应用指南:在 Electron 中托管与监控 Model Context Protocol 服务 2026/10/1 16:13:42

Ever Gauzy MCP Server 桌面应用指南:在 Electron 中托管与监控 Model Context Protocol 服务

后端前端企业应用MCP 服务 【免费下载链接】ever-gauzy Ever Gauzy™ - Open Business Management Platform (ERP/CRM/HRM/ATS/PM) - https://gauzy.co 项目地址: https://gitcode.com/GitHub_Trending/ev/ever-gauzy 点击查看 免费下载 本指南围绕 Ever Gauzy 仓库…

阅读更多 →
​实测:PPL 一字不差,256K 真能把针捞出来(4/5)​编辑​ 2026/10/1 16:13:42

​实测:PPL 一字不差,256K 真能把针捞出来(4/5)​编辑​

系列文章:12G 显存跑 256K 上下文。 这一篇全是数据。三组证据:质量零回退、A/B 对照证明检索有效、256K 端到端跑通。 一、质量:PPL 回归测试,62/62,delta 0 我的底线是"不为速度牺牲质量"。所以第一个要…

阅读更多 →
一氧化碳气体检测仪在户外露营场景的应用 2026/10/1 16:13:42

一氧化碳气体检测仪在户外露营场景的应用

一氧化碳(CO)是无色、无味、无嗅的剧毒气体,空气中浓度达到 50 ppm(parts per million,百万分之一浓度单位)持续 8 小时即可引发头痛,浓度超过 800 ppm 可在 45 分钟内导致意识丧失。户外露营场…

阅读更多 →
绿色矿山新国标落地:无人驾驶矿卡拿到“国家认证“,百亿赛道等来发令枪 2026/10/1 16:13:36

绿色矿山新国标落地:无人驾驶矿卡拿到“国家认证“,百亿赛道等来发令枪

知行产研:矿山无人驾驶产业观察第一平台。关注无人矿卡/重卡产业创新,点击上图查看本专题更多优质内容。 9月11日,2026中国国际矿业大会上,自然资源部与国家市场监督管理总局联合官宣:《绿色矿山建设规范》系列国家标…

阅读更多 →
AIHOT部署完全指南:Docker Compose、域名HTTPS、中国大陆加速与自动备份 2026/10/1 16:13:35

AIHOT部署完全指南:Docker Compose、域名HTTPS、中国大陆加速与自动备份

AIHOT部署完全指南:Docker Compose、域名HTTPS、中国大陆加速与自动备份 【免费下载链接】AIHOT 一个自己找热点、自己写日报的网站框架。把信源和精选标准换成你的,它就是你的行业热点站。 项目地址: https://gitcode.com/gh_mirrors/ai/AIHOT 本…

阅读更多 →
GEO优化产品描述服务实力参考:独立站GEO优化靠谱商家测评排名 2026/10/1 16:13:35

GEO优化产品描述服务实力参考:独立站GEO优化靠谱商家测评排名

苏州聚合增长信息科技有限公司是国内专注于制造业、机械、电子元器件等行业的GEO优化服务提供商,为企业提供聚合AI GEO国内版与国际版代运营服务,通过生成式引擎优化与智能体技术融合,帮助企业解决AI搜索时代的获客痛点,实现从品牌…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉