| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode 509:斐波那契数 -> 正文阅读 |
|
[数据结构与算法]LeetCode 509:斐波那契数 |
链接 方法一:递归+备忘录(重叠子问题)动态规划问题一般形式就是求最值;
状态转移方程、最优子结构、重叠子问题 就是动态规划三要素 ; 明确 base case -> 明确「状态」-> 明确「选择」 -> 定义 dp 数组/函数的含义。
则会有重复计算------------重叠子问题 假设n=20: dp定义:输入n,返回n的斐波那契数之和; 返回值 (回溯) 就是要计算的值!**
或者用HashMap来作为备忘录,n为Key,n的计算结果为Value:
带「备忘录」的递归算法,把?棵存在巨量冗余的递归树通过「剪枝」,改造成了?幅不存在冗余 的递归图,极?减少了?问题(即递归图中节点)的个数; 以上解法是「自顶向下」进?「递归」求解,我们更常?的动态规划代码是「自底向上」进?「递推」求解。 啥叫「自顶向下」?注意我们刚才画的递归树(或者说图),是从上向下延伸,都是从?个规模较?的原问 题?如说 f(20),向下逐渐分解规模,直到 f(1) 和 f(2) 这两个 base case,然后逐层返回答案,这就叫 「?顶向下」。 啥叫「自底向上」?反过来,直接从最底下、最简单、问题规模最?、已知结果的 f(1) 和 f(2)(base case)开始往上推,直到推到想要的答案 f(20)。这就是「递推」的思路,这也是动态规划?般都脱离了递归,?是由循环迭代完成计算的原因。 方法二:递推迭代 + DP Table引出「状态转移方程」这个名词,实际上就是描述问题结构的数学形式: f(n) 的函数参数会不断变化,所以你把参数 n 想做?个状态,这个状态 n 是由状态 n - 1 和状态 n - 2转移(相加)?来,这就叫状态转移 利用DP table数组 自底向上递推:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:46:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |