
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.1.2 可分可治,缺一不可
拆分是降低难度最简单和最普遍的方法,将大的或者难的问题拆开分解,这样难度就降低了,当能力大于拆分后的难度时,就可以把问题解决了。但是拆分的策略又是什么呢?并不是每个事物都像家具那样容易拆分,比如,对于一个大西瓜的切分,一个大西瓜要切成很多瓣,切的瓣数相当于问题的规模,而每瓣的大小对应问题规模的大小,如果切的瓣数比较少,那么每瓣的规模可能还是比较大,还是没有办法吃下去,究竟切多少瓣规模才算比较小,才比较容易吃下去呢?这是一个问题。再比如,分布式处理大数据,要部署多台服务器,部署服务器的数量相当于问题切分的数量,每台部署的服务器处理的数据相当于拆分问题的大小,部署的服务器太多,则每个问题被拆分得太小,浪费服务器的资源;部署的服务器太少,则每个问题被拆分得太大,各台服务器可能处理不过来。
为了解决这些问题,计算中分而治之算法的实现通常会结合二分法不断递归,先将原来的问题分成两个,如果分解后的问题不能被解决,再将两个问题继续分解成四个,如果分解后的问题还是不能被解决,就继续分解,直到问题可以被解决为止,如图3.1所示。

图3.1 分而治之算法求解问题流程
通过图3.1我们可以发现,分而治之算法是树形结构,通过不断地将问题分解来解决问题。