2015年7月16日星期四

动态规划总结

When to use DP?


  • Input cannot sort
  • Find minimum/maximum result
  • Check the feasibility 找可行性
  • Count all possible solutions 列出所有解


(1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
(2) 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。
(3)有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势

4 Types of DP

  • 1. Matrix DP (10%)
  • 2. Sequence (40%)
  • 3. Two Sequences DP (40%)*
  • 4. Backpack (10%)

通用解法:

1.  状 态 State

2. 方程 Function
状态之间的联系,怎么通过小的状态,来算大的状态

3. 初始化 Intialization
最极限的小状态是什么, 起点

4. 答案 Answer
最大的那个状态是什么,终点

Matrix DP


  • state: f[x][y] 表示我从起点走到 坐 标x,y……
  • function: 研究走到xy 这个点之前的一步是从哪里走的
  • intialize: 起点
  • answer: 终点

Sequence Dp

  • state: f[i]表示“ 前i”个位置/数字/字母,(以第i个为)...
  • function: f[i] = f[j] … j 是i之前的一个位置
  • intialize: f[0]..
  • answer: f[n-1]..


Two Sequences Dp


  • state: f[i][j]代表了第一个sequence的前i个数字/字符 配上第二个sequence的前j个...
  • function: f[i][j] = 研究第i个和第j个的匹配关系
  • intialize: f[i][0] 和 f[0][i](二维数组都要初始化第0行和第0列)
  • answer: f[s1.length()][s2.length()]

1. sequences
Climbing Stairs

Decode Ways

Unique Binary Search Trees

Maximum Subarray


Word Break

Palindrome Partitioning II



2. Matrix
Triangle

Unique Paths I

Unique Paths II

Minimum Path Sum

3. two sequences

Edit Distance

Distinct Subsequences

Interleaving String

Scramble String(3 sequences)

没有评论:

发表评论