# 算法步骤
核心思想:分而治之,将原问题分解为 n 个规模更小的,但是结构与原问题类似的子问题,递归解决子问题,再合并得到结果
基本步骤:
- 分解:原问题分解为若干子问题
- 解决:对子问题进行递归求解或根据终止条件(Base Case)求解
- 合并:将子问题的结果合并,得到原问题的解
适用条件:
- 原问题可以分解为具有相同结构的子问题
- 子问题可以独立求解,互相没有关联(分治与动态规划的明显区别)
- 具有分解的终止条件(Base Case)
- 子问题结果的合并,复杂度不能太高,否则算法不能有效降低复杂度
# 典型问题
- 二维平面上有 n 个点,如何快速计算出两个距离最近的点对
- 有两个 nn 的矩阵 A,B,如何快速求解两个矩阵的乘积 C=AB
海量数据处理:大部分数据结构和算法都是基于内存存储和单机处理,因此如果数据量非常大,无法一次加载到内存中去,很多算法便无法使用。一种解决思路是利用分治算法,将数据分为若干内存可以容纳的较小部分,对每个部分单独进行处理,最终再合并结果。这样不仅能克服内存限制,还能进一步利用多线程或者多机处理,加快处理速度