分而治之(D&C,Divide and Conquer),一种著名的递归式问题解决方法。
1.D&C的基本思想
将一个规模为N的问题分解为K个规模较小的子问题(K<=N),这些子问题相互独立且与原问题性质相同,求出子问题的解,就可以求出原问题的解。
2.使用D&C解决问题的过程包括三个步骤
(1)找出基线条件,这种条件必须尽可能简单。
(2)不断将问题分解(或者说缩小规模),直到符合基线条件。
(3)按原问题的要求,判断子问题的解是否就是原问题的解,或者需要将子问题的解逐层合并构成原问题的解。

举个例子

假设你是一个农场主,有一小块土地:

sofamesh解决的问题 sodas解决问题法中的d_问题解决方法

你要将土地均匀分成方块,且分出来的方块要尽可能大。
如何将一块地均匀的分成方块,并确保分出的方块是最大的呢?使用分而治之策略。
首先,找出基线条件,最容易处理的情况,就是一条边的长度是另一条边的整数倍
找出递归条件,每次递归调用都必须缩小问题的规模,如何缩小前述问题的规模?我们首先找出这块地可容纳的最大方块。

1.从这块地划出两个640m * 640m的方块,同时余下一小块640m*400m的地。

sofamesh解决的问题 sodas解决问题法中的d_递归_02

2.再次使用同样的划分方法,对于640m * 400m的土地,可从中划出的最大块地为400m * 400m。

sofamesh解决的问题 sodas解决问题法中的d_递归_03


最初要划分的土地尺寸为1680m * 640m,而现在要划分的土地更小,为640m * 400m,适用于这小块地的最大方块,也是适用于整块地的最大方块。

同理,对余下的土地使用相同的算法,直到土地分成两个方块后,将不会再余下任何土地。

sofamesh解决的问题 sodas解决问题法中的d_递归_04

因此,对于最初的那片土地,适用的最大方块是80m * 80m.