分治法 (Divide and Conquer)
将原问题分解为两个或多个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。
许多有用的算法在结构上是递归的,为了解决一个给定的问题,算法一次或多次递归地调用其自身以解决紧密相关的若干子问题,这些算法典型的遵循分治法的思想。
分治法在每层递归时都有三个步骤:
- 分解原问题为若干子问题,这些子问题是原问题规模较小的实例。
- 解决这些子问题,递归地求解各子问题。然而,若子问题的规模足够小,则直接求解。
- 合并这些子问题的解成原问题的解。
分治法的例子: