分治法

概述

分治法(Divide and Conquer)是一种将原问题分解为若干个规模较小的独立子问题,递归求解后再将子问题的解合并为原问题解的算法设计策略。其核心三步为:分解(Divide)→ 解决(Conquer)→ 合并(Combine)。分治法是许多高效算法的基础,其时间复杂度通常由递推关系刻画,可用主定理求解。

定义

分治法(Divide and Conquer)

分治法是一种递归式的算法设计范式,包含三个步骤:

  1. 分解(Divide):将原问题划分为若干个规模更小的子问题,子问题之间相互独立
  2. 解决(Conquer):递归地求解各子问题。若子问题规模足够小,则直接求解(基本情况)
  3. 合并(Combine):将子问题的解组合成原问题的解

形式化地,若分解产生 个规模为 的子问题,合并代价为 ,则运行时间满足递推关系:

核心性质

性质描述备注
子问题独立性各子问题之间互不重叠这是分治法与动态规划的关键区别
递归求解通过递归调用自身解决子问题需要明确的递归终止条件
合并步骤子问题的解需要合并为原问题的解合并代价 影响总复杂度
自然并行性独立子问题可并行求解适合动态多线程并行化
平衡分解子问题规模大致相等时效率最高不平衡分解可能导致退化

应用场景

分治法在算法导论中有大量经典应用:

分治法 vs 动态规划

比较维度分治法动态规划
子问题关系子问题不重叠子问题重叠
求解方式递归(自顶向下)自底向上填表或记忆化搜索
存储需求通常不需要额外存储需要表格存储子问题解
典型应用归并排序、StrassenLCS、矩阵链乘法

参见