是否经常听到朋友论述「我们公司正在尝试DP」、「想要成为一个好的程序员,你需要精通DP」等等,相信你一定也有质疑DP到底是什么的疑惑。下面我们一起来深入探究!
DP的概念DP的全名是Dynamic Programming,即动态规划。DP是一种解决问题的方案,一般来说,一个问题只要满足以下两个条件,就可以使用DP来解决:
1. 最优解性质:在问题的多个解法中,一定存在一种解法是最优的;
2. 无后效性:即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
如果一个问题满足了以上两个条件,那么我们就可以考虑使用DP来解决。
DP的应用场景DP算法的应用非常广泛,以下是一些常见的应用场景:
- 最长公共子序列
- 最小编辑距离
- 最优二叉搜索树
- 背包问题
- 矩阵连乘问题
相比于暴力解决问题,DP算法的时间复杂度更低。而相比于贪心算法,DP可以得到全局最优解而不是局部最优解。
DP的缺点相比于递归算法,DP的空间复杂度更高。
总结DP是一种解决问题的有效方式,解决许多需要求最优解的问题,是程序员必须掌握的一种算法。
什么是DP?
DP是分治法(Divide and Conquer)的一种典型应用。DP与分治法都是将问题分成若干个子问题,但是它们的不同点在于,DP子问题之间还有相互依赖的关系。
DP的基本思想是先以最简单、最基本、最小的问题为切入点,只考虑一个子问题,而后将此子问题的结果存储下来供以后的求解,同时对此问题进行递推,直到所求问题的规模达到最初规模的结果为止。
DP的寻找最优子结构性质,中途可以淘汰次优解。这种方法一般从问题的最后一步推到第一步,从简单的子问题出发,通过子问题的最优解逐步逼近原问题的最优解,找到全局最优解。
DP不仅可以用来求最大和最小值,而且可以用来求方案数等结果。DP适用的问题的特点是:求一个问题的最优解,整体最优解可以由局部最优解推导出来,而且子问题重复出现,有助于剪枝。
在算法竞赛领域,DP常被作为最后的破解武器,有时候卡在一道题上,可能只是因为没有想到用DP来做。
DP是什么意思?
在网络语言中,DP用来描述“打破沙锅问到底”的感觉 。毫无疑问,在我们的日常生活中,很多事情都需要DP去解决。
在技术领域,DP是“动态规划(Dynamic Programming)”的缩写。DP算法是计算机科学中一个常见的算法,用于解决多阶段决策的问题,比如最短路径、最长递增字序列等问题。
在舆论场上,DP通常意味着缩写“屌丝逆袭”(Depressing Perk),形容当一个屌丝在工作中、异性缘上、生活中等方面突然间有了一定的发展或者得到了令人羡慕的收获。
除此之外,DP还是形容在比赛或竞争中达到了一定体面的记录,比如运动员在比赛中刷新了纪录(Depression PB)。