从零开始学算法:基于Python
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1.3 合久必分,分久必合——治而合之

我们已经知道,分而治之算法就是将原问题分解成不同的小问题,然后对每个小问题求解,求解完每个小问题后,每个小问题的解其实还不是原问题的解,我们还需要将小问题的解合并成原问题的解,所以分而治之算法需要经历三步:分—治—合。比如,前面举的搬运家具的例子,“分”相当于将原家具拆分,“治”相当于运货车运送家具,而“合”相当于家具的再次组装,所以完整的分而治之算法求解问题流程如图3.2所示。

通过图3.2我们可以发现,在将问题分而治之以后,还需要对问题的解进行递归合并,自上而下层层合并,合并出来的中间解对应的是被拆分的中间问题,直到最终合并出原问题的解。

图3.2 完整的分而治之算法求解问题流程