概述
分而治之算法把一个问题实例分解为若干个小型而独立的实例,从而可以在并行计算机上执行。直到求得小型而独立的实例的解,即原问题的解是实例解的合并。
算法思想
分而治之算法与软件设计的模块化方法非常相似。一个问题的小实例可以用直接方法求解。而要解决一个问题的大实例,可以:
- 分解:把它分成两个或更多个更小的实例
- 求解:分别求解出每个小实例
- 合并:把这些小实例的解组合成原始大实例的解,小实例通常是原问题的实例,可以使用分而治之策略递归求解。
算法效率
分而治之算法是很多高效算法的基础,例如:Karatsuba快速乘法算法、快速排序算法和并行算法、矩阵乘法的施特拉森算法、快速傅里叶变换等。
示例
分而治之算法在高级语言中主要的一个思想是递归,这边要说下递归函数也是分而治之的一种算法。
以下是归并排序的示例代码,形参中array[]为排序数组,first为起始索引,last为终止索引。
void merge_sort(int array[]