分而治之是设计中普遍采用的一种技术, 所谓“分而治之” 就是把一个复杂的算法问题按一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的解,把各部分的解组成整个问题的解。
整体思路就是可以用分而治之将一个大问题分解围若干小问题,分别解决,找出小问题的解就可以找出原问题的解。分治法的基本步骤:
分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题
解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
合并:将各个子问题的解合并为原问题的解
比如金块问题
分治步骤:
1.我们设定最小不可分的大小为2。
2.首先将8块分为两个4块,然后4个二块。
3.然后对每个二块进行比较找出最大最小值,然后对找出的四个最大或者最小再次进行比较(是先比较12,和34然后胜者在进行比较)即可得到最大与最小值。划分了在依次比较,避免了多次比较地复杂,优化算法。
可以使用分治法求解的一些经典问题
二分搜索
大整数乘法
Strassen矩阵乘法
棋盘覆盖
合并排序
快速排序
线性时间选择
最接近点对问题
循环赛日程表
汉诺塔
二分搜索法
都避免了多次比较地复杂,优化算法。