分治算法
在算法设计中,常常引入分而治之的策略,称之为分治算法,其本质就是将一个大规模的问题分解为若干规模较小的相同子问题,分而治之1。分治算法是一种解题的思想,并不是某种如冒泡排序算法一样的固定的算法。
分治算法要点
一个问题是否可以用分治算法来解决,可以通过下面 3 个条件来判断。
- 原问题可以被分解为若干个规模较小的子问题,这些子问题是原问题的一个子集;
- 子问题之间相互独立;
- 子问题的解可以合并为原问题的解。
在分治策略中,当我们递归求解一个问题是,在每层递归时都有三个步骤2。
- 分解:原问题分为若干个子问题,子问题的形式与原问题一样,只是规模更小。
- 解决:递归求解出子问题。如果子问题规模足够小,则停止递归,直接求解。这里隐含的意思是,子问题在求解时还可以分成更小的子问题。
- 合并:将子问题的解组合成原问题的解。