问题分解就是通过对问题进行分解,从而将问题分解成有限个问题规模更小的子问题,从而达到问题求解的过程或者方法。问题分解是一种从问题规模出发来进行问题求解的方法,一般来讲,问题的规模与问题的复杂性密切相关,通过降低问题的规模可以达到减低问题复杂性,从而易于问题的求解。分治策略和动态规划都是这种思想。其实问题分解是问题求解思维中的一种基本的思维方式。当然问题能通过分解来获得答案,最关键的地方就是原问题的答案与分解后的子问题之间存在着关联关系,也就是原问题的解可以通过对分解后的子问题的解经过简单运算或选择就可得到(分治策略中是合并),这是问题能否通过分解进行求解的关键所在。,当然,如果原问题能够从子问题集中到处解,一个基本的要求是子问题之间必须是相互独立的。一般来讲,如果问题可以通过分解成子问题来求解,我们总希望能寻找到一种递归表达式,从而便于计算,特别是计算机的处理。怎么寻找这种表达式呢?
1)首先是观察,获取分解的原子规模的解,一般是观察规模为1..m的情况(m一般很小,很容易就能得出解),比如最快装配线问题中的只有1个装配站,2个装配站的情况,从而获得对于解的感性认识,可以帮助对递归表达式的猜测;
2)其次是分析规模n的解与子问题(规模k,k<n)解之间的关系,比较多的是倍数关系(n=αk,α>1)和线性关系T(n)=a1*T(n-b1)+a2*T(n-b2)+...;多项式关系(比如矩阵乘法计算顺序最优化求解问题);
3)通过对猜测或者推理获得递归表达式。
上述分析得到的递归表达式很容易得到递归运算程序,无论是动态规划还是分治策略都可以。
通过对