如何还没有了解算法简介的请去上一章:http://www.cnblogs.com/suxi-blog/articles/6238591.html
下一章是贪心算法和回溯算法:http://www.cnblogs.com/suxi-blog/articles/6239595.html
一.分治法
1.分治法的设计思路是,将一个难以直接解决的大问题,分割成一些规模比较小的相同的小问题,以便各个击破,分而治之。
2.分治法所能解决的问题的一般有以下的特征:
(1)该问题的规模缩小到一定的程度就可以容易解决(绝大多数的问题都满足)
(2)该问题是可以分解为若干个规模较小的相同的问题,即改问题具有最优子结构性质(前提,也是绝大多数的问题都满足的)
(3)利用该问题分解出的字问题的解可以合并该问题(关键)
(4)该问题分解出来的各个子问题是相互独立的(分治法的效率)
(如果具备一二条,但不具备第三条,可以考虑使用贪心算法或动态规划)
3.分治法的基本步骤:
(1)分解:将原问题分解为若干个规模较小、互相独立、与原问题形式相同的子问题。
(2)解决:若干问题规模较小而容易被解决则直接解,否则递归地解各个子问题
(3)合并:将各个子文题的解合并成原问题的解
(记住不是所有的分治法逗逼简单的蛮力法简单)
4.分治法的时间性能的与直接计算最小问题的时间、合并子文题解的时间以及子问题的个数有关:
c n=1
T(n)=
aT(n/b)+cn^k n>1
(其中a,b.c.k都是常数。这个递推描述了大小为n的原问题分解为若干大小为n/b的子问题,其中a个子问题需求求解,而cn^k是合并各个子问题的解所需要的工作量)
当子问题的规模之和小于原问题的规模时,算法的时间复杂度可达到0(n).
二.动态规划
1.简单的说就是在解决多阶决策的过程中动态的选择最优的过程的方法就是动态规划。
2.与分治法的区别:一般来说子问题不是互相独立的,可以理解为是分治法的一种改进,不需要求解已有解的子问题(已有解的子问题用表来记录)
3.适用条件:
(1)最优化原理(最优子结构):一个最优策略的子策略总是最优的---->局部最优,整体最优
(2)无后效性:每个状态都是过去历史的一个完整的总结
(3)子问题的重叠性:高效性
(最优子结构:当问题的最优解包含其子问题的最优解时,称该问题具有最有子结构;重叠子问题是一个递归解决方案里包含的子问题虽然很多,但不同子问题很少。少量的子问题被重复解决很多次。)
4.动态规划的最优化原理:作为整个过程策略具有的性质:无论过去的和决策如何,对于前面的决策形成的状态而言,余下的诸多决策必须过程最优策略。
--------------------------------------------------------------------------------------------------------------------------------------
今天就到这里,下一次是:贪心算法和回溯算法http://www.cnblogs.com/suxi-blog/articles/6239595.html
(哪位知道在文章内容编译中的大括号怎么写,还有个问题我是使用ogt来链接键盘,但在这个编译器中方向键无法使用是怎么回事,还有怎么解决,有知道的大佬告诉我一声,小弟在此谢过)