1、定义
分治法的主题思想就是分而治之,也就是说把一个大原问题变成两个或者多个小问题解决,最后把小问题的解合并起来就是原问题的解。
分——将原问题分解为多个小问题;
治——将这些小问题逐个解决;
合——将小问题解合并,就得出原问题的解;
2.算法实现
a、分治法的范式
①分解问题:把原问题分解为若干个与原问题性质相类似的子问题
②求解子问题:不断分解子问题直到可方便求出子问题的解为止
③合并子问题的解:合并子问题的解得到原问题的解
b、递归式
①divide:把具有n个元素的数组分解为二个n/2大小的子数组
②conquer:递归地分解子数组,直到子数组只包含一个元素为止
③combine:二二合并已排好序的子数组使之成为一个新的排好序的子数 组,重复这样二二合并的过程直到得到原问题的解
利用递归的思想,把问题一分为二,二分为四,直到只有一个很小的问题为止。再把小问题的解合并,最后得到原问题的解。
递归式时间复杂度:
T
(
n
)
=
a
T
(
b
n
)
+
D
(
n
)
+
C
(
n
)
T(n)=aT(\frac{b}{n})+D(n)+C(n)
T(n)=aT(nb)+D(n)+C(n)
3、分治法的适用条件
(1)可以把原问题分解成两个或者多个小问题。
(2)分解成小问题后求解更加方便。
(3)原问题的解可以由所有小问题的解的合并。
最后说一下,分治法算不上算法,分治只是一个思想,很多算法都会用到这种思想。
五大基础算法——分治法
最新推荐文章于 2023-06-12 15:42:42 发布