每次体会算法都有新的感觉,刷题越多,对算法的理解感觉也就越深刻。
下面我们来重新体会下分治法,动态规划,贪心法,递归的理解。
1.分治法:
将问题分成单独的阶段,每个阶段互相不干扰很独立,如10米长的木棍,切成10段,每段去解决每一段的问题。(阶段没有关系)
2.贪心法
站在全局的角度,也是将问题堪称分为多个阶段,只不过阶段和阶段之间有一定的递进关系,如从5毛,1元,2毛,1毛,2元中,去找最少的钱币构成10块钱。首先是站在全局的角度,先从中取其最大值,为第一阶段,然后在从剩余的当中在找最大值,构成第二阶段。。。。。。如此往复,这就是贪心法。
3.动态规划
是阶段和阶段之间有重复,举例说明:求一个数组的最长递增子序列。假设数组有10个元素,那么如何求解呢?将10个元素划分成10个阶段,第一个阶段,从第一个元素中求解,第二个阶段在第一个阶段求其解,第三个阶段在第一个,第二个阶段综合的基础上求解,第四个阶段在第1,2,3个阶段求其解,最后。。。。第k个阶段在第1,2....k-1个阶段求其最优解。
4.递归算法
个人感觉和动态规划反着来的样子,有点像,问题规模为10,转化为问题规模为9的问题,,问题规模为9的问题,转化为8.。。。。。
5.回溯法和分支限界法
都属于组合优化问题,就是按照过程向下面去寻找最优解,在寻找最优解的过程,不断的剪取枝条,来减少搜索情况。不行就换思路。
本文出自 “简答生活” 博客,谢绝转载!
原文地址:http://1464490021.blog.51cto.com/4467028/1959415