贪心算法(greedy algorithm)
解题思路:
1.针对一组数据,定义了限制值和期望值,在满足限制值的情况下,期望值最大
2.每次选择当前情况下,最对限制值同等贡献的情况下,对期望值贡献最大的数据
3.举几个例子验证一下贪心算法的正确性
在很多情况下贪心算法并不能给出问题的最优解,因为贪心算法总是选择当前情况下最优的解,比如在有权图中寻找最短路径,可能因为选择了当前的最优解,而放弃了其他路径之后的最优解。
贪心算法的经典实战:背包问题,分糖果问题,钱币找零,区间覆盖,哈夫曼编码
分治算法(divide and conquer)
核心就是:分而治之,将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归的解决这些子问题,然后再合并结果,就得到原问题的解。
分支算法是一种处理问题的思想,递归是编码的一种技巧。一般需要用分支算法解决的问题都用递归来解决。
分支算法在大数据中应用的比较明显
分支算法的经典实战:求数组的逆序对个数
回溯算法(backtracking algorithm)
回溯的处理思想有点类似于枚举,枚举出所有的解,找到符合期望值的解。把问题求解的过程分为几个阶段,每个阶段,我们都会做出选择,就像走路一样,当发现这条路走不通,我们就回到上一个岔路口,重新选择,知道找到期望值。
回溯算法的经典实战