分而治之算法将一个问题分成更小的子问题,然后将这些子问题进一步递归求解。
分而治之算法步骤
1、使用递归将给定问题划分为子问题
2、递归解决较小的子问题,如果子问题足够小,则直接求解
3、组合子问题的解决方案以获得实际问题的答案
分而治之算法实例
给定数组,对该数组进行排序,如下图:
将数组分成两个子部分,如下图:
同样,将每个子部分递归划分,直到获得单个元素。如下图:
现在,以排序方式组合各个元素。此时就用到上述步骤2和步骤3,最后合并子部分并输出。如下图:
分而治之算法与动态规则算法的区别
分而治之算法每个子问题的结果不会被存储,而在动态规则算法中,每个子问题的结果会被存储以供参考。
当同一个子问题需要多次使用对比,则更适合使用动态规则算法,反之使用分而治之算法更加高效。