Re: 上厕所如何压水花? (转载)# Joke - 肚皮舞运动
p*2
1 楼
不断看到有新人学习DP,想谈谈我的感受。
我大概是去年底,今年初开始学习DP的。以前没有一点概念。去年G电面我的时候就出
了一道最简单的DP题,那时我根本不知道什么是DP,在提示下用recursion做出来的,
没有用cache。
开始学习DP是在careercup 150那本书上。下面是一些感受。
1. careercup定义的DP就是recursion+cache。这个定义指导了我很长时间。我认为这
个定义是DP的初级阶段,有误导性,使得我在练习的时候发现很多题型用这个定义套不
上。误导性在于: 1, recursion+cache是DP不错,但是DP并不等于recursion+cache。
2, recursion的DP并不优化,因此从recursion出发做DP不是个好思路。
2. 我后来理解的DP是这样子的。很简单就是推DP公式。也就是说怎么用F(n-i) 推导出
F(n)来。当然这也是最难的。发现很多难题还是很难想到这个公式的,可能就得多练习
了,培养思路。这个定义跟careercup上的不一样的地方主要是思考的方式不同,一个
是推公式,一个是找recursion的办法。而DP的关键是推公式,如果从recursion出发的
话,很多题可能做不出来。
做DP题需要注意两点:
1. 能用iteration就不要用recursion。这也证明了careercup上的定义有局限性了。
2. DP是用空间换时间。所以DP题做熟了,应该考虑怎样优化空间了。能用常数空间就
不要用O(n), 能用O(n)就不要用O(n^2). (我觉得这也是Vissa的霸气所在。Vissa面F
的时候说过“这么简单的DP题,我从来都是用常数空间”)。
最后就是多做题才能培养思路。一般面试应该不会有很难的DP题,多练习一下有了思路
,再能写出iteration和空间优化的解法,并且能保证少bug的话,应该面试就差不多了
。
我大概是去年底,今年初开始学习DP的。以前没有一点概念。去年G电面我的时候就出
了一道最简单的DP题,那时我根本不知道什么是DP,在提示下用recursion做出来的,
没有用cache。
开始学习DP是在careercup 150那本书上。下面是一些感受。
1. careercup定义的DP就是recursion+cache。这个定义指导了我很长时间。我认为这
个定义是DP的初级阶段,有误导性,使得我在练习的时候发现很多题型用这个定义套不
上。误导性在于: 1, recursion+cache是DP不错,但是DP并不等于recursion+cache。
2, recursion的DP并不优化,因此从recursion出发做DP不是个好思路。
2. 我后来理解的DP是这样子的。很简单就是推DP公式。也就是说怎么用F(n-i) 推导出
F(n)来。当然这也是最难的。发现很多难题还是很难想到这个公式的,可能就得多练习
了,培养思路。这个定义跟careercup上的不一样的地方主要是思考的方式不同,一个
是推公式,一个是找recursion的办法。而DP的关键是推公式,如果从recursion出发的
话,很多题可能做不出来。
做DP题需要注意两点:
1. 能用iteration就不要用recursion。这也证明了careercup上的定义有局限性了。
2. DP是用空间换时间。所以DP题做熟了,应该考虑怎样优化空间了。能用常数空间就
不要用O(n), 能用O(n)就不要用O(n^2). (我觉得这也是Vissa的霸气所在。Vissa面F
的时候说过“这么简单的DP题,我从来都是用常数空间”)。
最后就是多做题才能培养思路。一般面试应该不会有很难的DP题,多练习一下有了思路
,再能写出iteration和空间优化的解法,并且能保证少bug的话,应该面试就差不多了
。