动态规划Dynamic Programming
动态规划Dynamic Programming
code教你做人:DP其实不算是一种算法,而是一种思想/思路,分阶段决策的思路
理解动态规划:
递归与动态规划的联系与区别 -> 记忆化搜索 -> 本质:动态规划
什么时候使用动态规划:
使用动态规划的三个条件
1.求最大值最小值/判断是否可行/统计方案个数 2.求所有方案/集合而不是序列 3.把2^n优化成n^2的题目
不使用动态规划的三个条件
1.求出所有具体的方案而非方案个数 2.输入数据是一个集合而不是序列 3.暴力算法的复杂度已经是多项式级别(不适合把n^3优化成n^2)
动规四要素:
状态state:
灵感,创造力,存储小规模问题的结果。用F什么什么代表什么什么(最难的部分)。dp的难点主要是状态的设计,所以推荐从dfs入手,dfs的状态就是和dp的状态差不多的,dfs(x,y) dp[x][y],搜索的参数就是一种状态
方程function:
状态之间的联系,怎么通过小的状态,来算大的状态
初始化Initialization:
最极限的小状态是什么,起点
答案Answer:
最大的那个状态是什么,终点
与递归进行比较:
递归三要素:
定义(状态): 1.接受什么参数 2.做了什么事 3.返回什么值
拆解(方程): 如何将参数变小
出口(初始化): 什么时候可以直接return
多重循环 vs 记忆化搜索
多重循环:优点:正规,大多数面试官可以接受,存在空间优化可能性。缺点:思考有难度
记忆化搜索:优点:容易从搜索算法直接转化过来。有的时候可以节省更多的时间。缺点:递归
能用DP的肯定也可以用DFS做,DP是不做重复的事情,那DFS就会出现大量做重复的事情,所以DFS效率低
相关题目:
45. Jump Game II
55. Jump Game
62. Unique Paths
63. Unique Paths II
64. Minimum Path Sum
70. Climbing Stairs
72. Edit Distance
97. Interleaving String
115. Distinct Subsequences
120. Triangle
131. Palindrome Partitioning
132. Palindrome Partitioning II
139. Word Break
140. Word Break II
174. Dungeon Game
300. Longest Increasing Subsequence
741. Cherry Pickup
https://leetcode.com/problems/dungeon-game/
面试中常见的动态规划类型
坐标型动态规划15
state:
f[x] 表示我从起点走到坐标x 代表的是一个个体,当前x位置的f(x) 值
f[x][y] 表示我从起点走到坐标x,y…
function: 研究走到x,y这个点之前的一步
Initialize: 起点
answer:终点
P.S.初始化一个二维的动态规划时,就去初始化第0行和第0列
序列型动态规划30多用于String
state: f(i) 代表的是一个整体,前i个
function: f[i] = f[j] ….j是i之前的一个位置
initialize: f[0]
Answer: f[n]
一般answer是f(n)而不是f(n-1):因为对于n个字符,包含前0个字符(空串), 前1个字符…前n个字符。
方案总数(最多/最少)和yes or no是一个意思
双序列动态规划 30 两个sequence
state: f[i][j] 代表了第一个sequence的前i个数字/字符,配上第二个sequence的前j个
function: f[i][j] = 研究第i个和第j个的匹配关系
initialize: f[i][0] 和 f[0][i]
Answer: f[n][m]
N = s1.length()
M = s2.length()
LCS/方案总数大部分都是DP,唯一不是的是N-Queen
划分型动态规划 30
背包型动态规划 10
区间型动态规划 5
动态规划Dynamic Programming的更多相关文章
- 6专题总结-动态规划dynamic programming
专题6--动态规划 1.动态规划基础知识 什么情况下可能是动态规划?满足下面三个条件之一:1. Maximum/Minimum -- 最大最小,最长,最短:写程序一般有max/min.2. Yes/N ...
- 动态规划(Dynamic Programming)算法与LC实例的理解
动态规划(Dynamic Programming)算法与LC实例的理解 希望通过写下来自己学习历程的方式帮助自己加深对知识的理解,也帮助其他人更好地学习,少走弯路.也欢迎大家来给我的Github的Le ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- [算法]动态规划(Dynamic programming)
转载请注明原创:http://www.cnblogs.com/StartoverX/p/4603173.html Dynamic Programming的Programming指的不是程序而是一种表格 ...
- 最优化问题 Optimization Problems & 动态规划 Dynamic Programming
2018-01-12 22:50:06 一.优化问题 优化问题用数学的角度来分析就是去求一个函数或者说方程的极大值或者极小值,通常这种优化问题是有约束条件的,所以也被称为约束优化问题. 约束优化问题( ...
- 动态规划系列(零)—— 动态规划(Dynamic Programming)总结
动态规划三要素:重叠⼦问题.最优⼦结构.状态转移⽅程. 动态规划的三个需要明确的点就是「状态」「选择」和「base case」,对应着回溯算法中走过的「路径」,当前的「选择列表」和「结束条件」. 某种 ...
- 动态规划 Dynamic Programming 学习笔记
文章以 CC-BY-SA 方式共享,此说明高于本站内其他说明. 本文尚未完工,但内容足够丰富,故提前发布. 内容包含大量 \(\LaTeX\) 公式,渲染可能需要一些时间,请耐心等待渲染(约 5s). ...
- Python算法之动态规划(Dynamic Programming)解析:二维矩阵中的醉汉(魔改版leetcode出界的路径数)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_168 现在很多互联网企业学聪明了,知道应聘者有目的性的刷Leetcode原题,用来应付算法题面试,所以开始对这些题进行" ...
- 后台开发 3个题目 array_chunk, 100块钱找零钱(动态规划 dynamic programming), 双向循环链表 llist 删除节点
1. array_chunk 实现 http://php.net/manual/en/function.array-chunk.php <?php function my_array_chunk ...
随机推荐
- python文件读书笔记
一.打开文件 1 f=open('text.txt',r) 二.读取文件 print(f.read) 三.关闭文件 f.close() 比较好用的是运用with with open('text.tx ...
- 树形插件zTree与组织插件jOrgChart交互
<html> <head> <title>组织架构</title> <meta http-equiv="content-type&quo ...
- 【FJOI 20170305】省选模拟赛
题面被改成了个猪... T1猪猪划船(boat) [题目描述] 6只可爱的猪猪们一起旅游,其中有3只大猪A,B,C,他们的孩子为3只小猪a,b,c.由于猪猪们十分凶残,如果小猪在没有父母监护的情况下, ...
- Springboot中Jackson的操作
有一段时间没写博客了,虽然是菜鸟一枚但毕竟总要有东西记录学习的,我相信有志者事竟成.今天在工作中使用Jackson转换了一个javabean,传到测试服上之后发现日期少了一天,使用的是@JsonFor ...
- Clover 安装 Mac 系统更新 (原版黑苹果)
关于使用原版镜像(即 .dmg )安装黑苹果的升级,笔者写写自身经验吧. 在Clover启动的界面中与Mac OS有关的启动菜单有以下这些: Boot FileVault Prebooter from ...
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group t1,customer t2
### SQL: select t1.gid,t1.gname,t1.gvalue,t1.gtype, t1.gaddress,t1.gmembers, t1.gcode,t1.gphone, t2. ...
- vue 打开新窗口
const {href} = this.$router.resolve({ name: 'foo', query: { bar } }) window.open(href, '_blank')
- git上传
#1.Git 全局设置: git config --global user.name "skbarcode" git config --global user.email &quo ...
- Adb工具的简单使用
Adb全称为Android Debug Bridge adb就是连接android手机与PC机的桥梁,可以在pc端对手机进行全面的操作 借助adb工具,可以管理设备或者手机模拟器的状态,进行手机操作, ...
- Golang安装与命令
1. 安装 Windows - https://golang.org/dl/ 下载msi安装包,点击安装即可.安装后cmd运行go version弹出版本号即安装成功. 2. 命令行 生成exe文件 ...