在计算机科学中,分治是一种基于多分支递归的算法设计范式。分治算法的工作原理是递归地将一个问题分解成两个或多个相同或相关类型的子问题,直到这些问题变得能够容易直接解决。然后将子问题的解决方案组合起来,得出原始问题的解决方案。
这种分治技术是采用高效算法处理各种问题的基础,例如排序(例如快速排序、归并排序)、大数相乘(例如卡拉津巴算法)、寻找最接近的点对、句法分析(例如自上而下的解析器)以及计算离散傅立叶变换(FFT)。
理解和设计分治算法是一项复杂的技能,需要很好地理解所要解决的潜在问题的本质。当用归纳法证明一个定理时,通常需要用一个更一般或更复杂的问题来代替原来的问题,以便初始化递归,并且没有系统的方法去解决所有类似的问题。当用高效的双重递归优化斐波那契数的计算时,可以看到这些分治的复杂情况。
分治算法的正确性通常通过数学归纳法来证明,其计算成本通常通过求解递归关系来确定。
将一个算法层次化,进行分层操作,使得这个问题简单化,从而节省开发时间,提高效率。