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

如何思考一个动态规划问题需要几个状态?

如何思考一个动态规划问题需要几个状态?

  • 第一步:思考 角色
  • 第二步:考虑 过去的影响
  • 第三步:画出状态转移图
  • 第四步:写出状态转移方程
  • 第五步:验证是否能覆盖所有路径 + 边界
  • 几个常见题目
  • 总结:

第一步:思考 角色

问自己:我当前的状态可能有哪些不同的“角色”?

  • 比如买卖股票问题:

    • 有可能是持股、卖出、休息,→ 3 种角色
  • 背包问题:

    • 角色比较固定:容量 / 物品选择

状态数 ≈ 当前时刻下,决策行为或状态的枚举情况

第二步:考虑 过去的影响

问自己:我做一个动作,会不会受到前一天某种特定状态的限制?

  • 如果有“冷冻期”,说明不是所有状态之间都能直接转移 → 你就需要引入“冷冻”这个额外状态

  • 如果只有买卖无限制,两个状态就够(持股 / 不持股)

状态数 ≈ 为了准确区分不同限制路径,你需要多少“分支状态”来表示

第三步:画出状态转移图

手动画出:

  • 节点 = 状态

  • 边 = 状态转移(由什么转到什么)

如果画出状态图后,发现某个状态没有前驱或不影响结果,那说明可能是冗余状态,可以删去

第四步:写出状态转移方程

通过写递推公式,你会发现:

  • 如果公式里无法统一表达当前动作,可能因为状态粒度不够细

  • 如果写着写着发现状态分不清,可能因为状态定义太模糊,需要拆分更多状态

第五步:验证是否能覆盖所有路径 + 边界

确认:

  • 所有可能的行为(买、卖、等)都能用已有状态表示

  • 边界条件(第一天、最后一天)状态是否有明确初始化

几个常见题目

题目 / 问题类型状态数状态解释
买卖股票(无限次,无限制)2持股 / 不持股
买卖股票(含冷冻期)3持股 / 卖出 / 冷冻
买卖股票(最多两次)4第一次买 / 第一次卖 / 第二次买 / 第二次卖
0-1 背包问题1 或 2一维表示容量,或二维加物品维度
打家劫舍(不能偷连续两家)2偷/不偷

总结:

“状态由角色定,变化看限制,画出状态图看转移是否清晰,冗余是否可合并。”

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

相关文章:

  • 负载均衡 LoadBalance
  • 阻止网页重定向
  • 6、企业信息化
  • 齐护Ebook科技与艺术Steam教育套件 可图形化micropython Arduino编程ESP32纸电路手工
  • 装修独栋别墅需要注意的细节有哪些?
  • 像素农场播种机-作物模拟器HTML+CSS+JavaScript
  • Linux 系统网络配置及 IP 地址相关知识汇总
  • JVM terminated. Exit code=1
  • 通俗理解主机的BIOS和UEFI启动方式
  • SpringBoot 整合 Langchain4j AIService 深度使用详解
  • uniapp input 聚焦时键盘弹起滚动到对应的部分
  • Python入门构建网页
  • Python爬虫实战:研究netaddr库相关技术构建IP地址信息采集分析系统
  • r0env2024:开箱即用的AI工具集成Kali发新版
  • Java学习-------外观模式
  • 不坑盒子:Word里1秒制作“花括号”题目,多音字组词、形近字组词……
  • J3160迷你小主机 性能测试 对比i3-4170 以及服务器
  • 【Linux | 网络】传输层(UDP和TCP)
  • Word和WPS文字如何制作分栏试卷?想分几栏分几栏
  • 使用uni-app开发一个点餐收银台系统前端静态项目练习
  • Netty中 ? extends Future<? super V>这种的写法的理解
  • 使用GPU训练模型
  • MyBatis-Plus高效开发实战
  • 关于GRPC的相关知识。
  • 编程语言Java——核心技术篇(五)IO流:数据洪流中的航道设计
  • 点击劫持:潜藏在指尖的安全陷阱
  • 【Unity3D实例-功能-移动】角色移动-通过WSAD(Transform方式)
  • 《频率之光:共振之恋》
  • 益莱储:明智地投资测试仪器
  • 数据结构的基本知识