“分治算法常先导出规则递推,再检查它落在哪一类。代入法可以验证猜测并处理取整、边界或附加项;Akra–Bazzi 方法则处理更一般的不等规模分支。”
形式陈述
分治算法把规模为
这里
正确性证明分三步:基例直接正确,假设较小实例已正确求解,再证明这些答案足够合成原实例答案。
直觉
分治把实例拆成规模严格下降、结构相同且覆盖原问题的子问题,独立求解后再组合答案。效率取决于子问题是否平衡、是否大量重叠,以及合并需要多少工作。经典分治通常不复用重叠子问题。
例子与边界
归并排序把数组均分、递归排序两半,再线性合并。例如
每个元素在一次合并中仅被取走一次,故合并成本为
快速排序的子问题大小依赖枢轴,若枢轴总取到极端值,会形成
推论与应用
分治用于排序、几何、FFT 与选择;平面最近点对展示了“递归解两侧 + packing 证明线性合并”的几何版本。折半搜索把指数候选分成两半并在中间匹配,将典型
同一递归图像还能服务不同模型。对数方法动态化把静态结构按二进制块合并,以重建换取摊还更新;缓存无关模型通过递归布局在未知
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022, Chapter 4:分治与递推分析。
- Jon Kleinberg and Éva Tardos, Algorithm Design, Pearson, 2005, Chapter 5:分治算法。