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

【算法】小白也能懂 · 第 11 节:动态规划入门

在前面 10 节中,我们学了递归、二叉树、图的 BFS/DFS 等基础数据结构与算法。今天,我们来认识一个让无数初学者又爱又恨的概念——动态规划(Dynamic Programming,简称 DP)。别怕,跟着节奏走,你会发现它其实没那么神秘。1. 什么是动态规划简单来说,动态规划的核心思想就是一句话:把大问题拆成小问题,记住已经算过的结果,避免重复计算。你可以把 DP 想象成一个"聪明的备忘录"。比如你去餐厅点菜,第一次算总价很慢,但你把结果记在小本本上。下次有人问同样的组合,直接翻本子就行,不用重新算。DP 有两种经典写法:自顶向下(记忆化搜索):从大问题出发,用递归拆解,同时用数组或哈希表记录已算过的结果。自底向上(递推):从最小的子问题开始,逐步向上推导出最终答案。两种写法殊途同归,选择哪种看个人习惯和题目场景。2. DP 的两个关键性质一个能用 DP 解决的问题,通常具备两个特征:2.1 最优子结构大问题的最优解,可以由子问题的最优解组合得到。比如"从 A 到 C 的最短路径",如果经过 B,那么 A 到 B 的部分一定也是最短的。2.2 重叠子问题递归过程中,同一个子问题会被反复计算。这就是 DP 存在的意义——把重复的计算结果缓存起来,只算一次。3. 经典例子 1:斐波那契数列斐波那契数列定义:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2)。我们从朴素递归一步步优化到 DP。3.1 朴素递归(很慢)#includeiostreamusingnamespacestd;intfib(intn){if(n=1)returnn;returnfib(n-1)+fib(n-2);}intmain(){coutfib(10)endl;// 输出 55return0;}这段代码简单直观,但时间复杂度是 O(2^n)。为什么?因为fib(5)会算fib(4)和fib(3),而fib(4)又会算fib(3)——fib(3)被算了两次!n 越大,重复越多,指数级爆炸。3.2 记忆化搜索(自顶向下 DP)加一个memo数组缓存结果,每个子问题只算一次,时间复杂度降为 O(n)!#includeiostream#includecstringusingnamespacestd;intmemo[100];intfib(intn){if(n=1)returnn;if(memo[n]!=-1)returnmemo[n];// 已算过,直接返回memo[n]=fib(n-1)+fib(n-2);returnmemo[n];
http://www.zskr.cn/news/1319936.html

相关文章:

  • 别再死记ResNet结构了!用PyTorch手把手带你复现ResNet-50(附完整代码与可视化)
  • 告别iTunes!在Ubuntu 22.04上使用libimobiledevice管理你的iPhone文件
  • Go 入门 08:goroutine 与 channel
  • 手把手教你用PyTorch 1.2和CUDA 10.0复现GaitSet步态识别(附完整代码与数据集处理避坑指南)
  • 别再死磕CANopen协议了!用倍福EL6751网关,5分钟搞定EtherCAT与伺服驱动器的连接
  • STM32CubeMX配置FreeRTOS时,那个不起眼的定时器TIM16到底在干嘛?新手避坑指南
  • 别再为FPGA网络通信发愁了!手把手教你用Tri Mode Ethernet MAC搞定UDP(附12套源码移植指南)
  • 097、运动控制中的传感器融合:卡尔曼滤波基础
  • PIC32MZ EF嵌入式开发实战:硬件FPU与多协议连接方案解析
  • Python迭代器实战:构建高性能懒加载积分榜系统
  • 大模型求职避坑指南:收藏这份三层准备路径,轻松拿下高薪Offer!
  • NoFences:重新定义Windows桌面管理的开源解决方案
  • 收藏!小白程序员轻松入门大模型:CRAG技术详解与LangChain实战
  • 抖音不能下载的视频怎么保存到相册?抖音视频保存方法2026实测,这几招亲测有效 - 爱上科技热点
  • Win11家庭版隐藏功能解锁:除了gpedit.msc,这些高级设置你也能用了
  • 3步快速上手Univer:从零构建企业级办公套件的完整指南
  • 降本增效突围,Captain AI助力Ozon商家提升盈利空间
  • 线程安全实战指南:从数据竞争到高并发系统设计
  • 杭州文鸿金座公寓:地段、价格与性价比的终极解析 - 速递信息
  • XNBCLI深度解析:解锁星露谷物语资源编辑的终极命令行工具
  • 从CTF靶场到实战:手把手复现UUCTF Web赛题中的PHP反序列化字符串逃逸漏洞
  • PP/PPH储罐、PP/PPH搅拌罐
  • 看懂真相:医疗、汽车为什么非要硬推AI?
  • 告别枯燥Demo:用C#给SolidWorks插件加个‘撤销’和‘宏录制’功能(附完整代码)
  • XZ6920输入电压2.5-100V 输出电流ADJ(10mA-6A)高亮度LED恒流驱动控制芯片
  • 教育工作者速看!Perplexity学术搜索正在悄然替代Google Scholar(2024教育AI搜索白皮书首发)
  • 别再复制粘贴了!深度解析STM32F429的OLED驱动代码,让你的显示更稳定
  • 别再死磕深度学习!用OpenCV+Python玩转经典分水岭算法,5分钟搞定细胞计数
  • 互联网大厂 Java 求职面试:音视频场景与 Spring Boot 的结合
  • 全志A40i工业核心板选型与开发实战:从硬件解析到应用部署