动态规划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:更改pip源
windows更改pip源 cmd echo %APPDATA% 打开目录 创建文件夹pip 创建pip.ini文件 [global] timeout = 60 index-url = http:// ...
- io模型---非阻塞模型
Linux下,可以通过设置socket使其变为non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用户进程发出read操作时,如果 ...
- Pandas 基础(17) - to_datetime
这一节依然是关于时间的知识, 在平时的工作中, 有一个非常令我们恼火的就是时间的格式可以有很多种表达, 比如下面这张图, 我们看到同样是 2017年1月5日, 可以有很多种时间的格式, 我们需要先将格 ...
- python2和python3的range(100)的区别
python2返回列表,python3返回迭代器,节约内存
- springboot(一)
@Configuration:声明当前类是一个配置类==等同于 spring的xml文件,如果使用了改注解意味着该类里可能有0个或者多个@bean注解,此处没有使用包扫描,是因为所有的@bean 都在 ...
- POJ 1061 青蛙的约会(拓展欧几里得)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...
- winform SerialPort串口通信问题
一.串口通信简介串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串 ...
- 自动车牌识别(ALPR)---https://blog.csdn.net/ELEVEN_ZOU/article/details/80893579
1.基本功能:从一张或者一系列的图片中提取车牌信息,比如车牌号码.车牌颜色等信息. 2.功能扩展:车型.车品牌.车牌类型等. 3.应用方向:电子交易系统(停车自动收费.收费站自动支付等).交通执法.交 ...
- urllib库详解 --Python3
相关:urllib是python内置的http请求库,本文介绍urllib三个模块:请求模块urllib.request.异常处理模块urllib.error.url解析模块urllib.parse. ...
- 记一次oracle数据库复制过程
记录一次自己数据库复制的过程(从公司测试环境复制到客户测试环境),主要是每次自己都会忘记,不如记录一下,方便自己以后找,因此,本篇内容不会很详细,主要是用于给我自己提醒,相对于一种记笔记的效果. cm ...