动态规划太难?刷题无数,不如掌握这些套路
Posted Python与机器智能
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划太难?刷题无数,不如掌握这些套路相关的知识,希望对你有一定的参考价值。
又是一年金九银十,你跳槽了么?面试被虐了么?
想必面过大厂的人都知道,动态规划一直是个大热门。
首先,动态规划考察了面试者的数学模型抽象能力和逻辑思维能力,可以反应个人在算法上的综合能力;其次,懂得了动态规划,能在工作中无限降低算法复杂度,在程序员晋升上也能胜人一筹。
但即使知道它很重要,很多人一想起来依然是“脑壳痛”,在工作和面试中也很难实践应用,问题出在哪了?
很简单:不理解动规的思想,无法掌握解题套路。
作为一种高级技术思想,动规是从一系列算法中演进而来的。求解动态规划的核心问题其实就是穷举,但穷举和动态规划在真正用的时候还是有区别的,首先要解决的是,什么样的问题要用动态规划,怎么用?
举个例子,在实际工作中,除非你碰到的问题是简单到找出一个数组中最大的值这样,对这种问题来说,你可以对数组进行排序,然后取数组头或尾部的元素,如果觉得麻烦,你也可以直接遍历得到最值。不然的话,你就得考虑使用动态规划来解决这个问题了。这样的问题一般都会让你求最大子数组、求最长递增子数组、求最长递增子序列或求最长公共子串、子序列等等。不知道你发现没有,这些问题里都包含一个“最”字,如果出现了这个字,你就该警惕它是否是动归问题。
具体怎么判断呢?你可以按照这样的思考顺序来解决问题:
优先考虑使用贪心算法的可能性;
然后是暴力递归进行穷举(但这里的数据规模不大);
还是不行呢?选择动态规划!
那么,当我们遇到一个算法问题,到底是否该使用动态规划来求解呢?可以参考这
5 大特点:
求最优解问题(最大值和最小值)
求可行性(True 或 False)
求方案总数
数据结构不可排序(Unsortable)
算法不可使用交换(Non-swappable)
如果面试题目出现这些特征,那么在 90% 的情况下你都能断言它就是一个动归问题。
这套判断动规问题的思路,来自于卢誉声,Autodesk 核心数据平台和计算平台资深工程师,除此之外,我还找到了他整理的「动态规划知识结构图」,可以收藏 以上是关于动态规划太难?刷题无数,不如掌握这些套路的主要内容,如果未能解决你的问题,请参考以下文章