如图,分治法顾名思义,就是分而治之,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题通过递归的解的合并。

分--将问题分解为规模更小的子问题;

治--将这些规模更小的子问题逐个击破;

合--将已解决的子问题合并,最终得出原问题的解;

问题的规模缩小到一定的程度就可以容易地解决;

问题可以分解为若干个规模较小的相同子问题;

问题分解出的子问题的解可以合并为该问题的解;

各个子问题是相互独立的,即子问题之间不包含公共的子问题。

分治法的提出就是为了解决可分解的大型复杂的问题,如果问题无法分解递归,分治法是不适合用于该问题的。同时,分解后各子问题也不可以包含公共的子问题,如果包含多公共子问题,分治法要做许多不必要的工作,重复地解公共的子问题;另外,分解后的子问题的求解一定不是很复杂,否则那样分治法无意义。最后各子问题一定要可以合并,否则无法得到原解。

分治法常用于大型问题求解,能将大规模问题分解为各小规模问题,相比较于暴力算法,分治法大大提高了时间效率,有较大的优势,但是由于递归调用,如果解决大规模问题,则效率不高,空间时间复杂度高。

缺点:由于两个人对同一问题可能想法不同,正在编码的同学的思路可能会被提供思路的同学提供的思路而混淆编码不下去。