434
社区成员
发帖
与我相关
我的任务
分享一、分治法
1、分治法思想的理解:
分:将一个问题划分为同一类型规模相同的若干个子问题
求:对若干个子问题求解,求解的方法一般使用递归
合:合并子问题的解,得到原始问题的解
2、归并排序最坏运行时间[递归式]的求解(代入法、递归树法、主方法)
二、最大字段与分治法
1、用分治法求解最大字段和问题时,大致可分为三种情况
最大字段和位于左边
最大字段和位于右边
最大字段和位于中间
2、解决方案:
第一种情况,递归求取左边,记录左端最大字段和
第二种情况,递归求取右边,记录右端最大字段和
第三种情况,位于中间时(即中间值包含在最大字段),取得中间值往左右两边分别相加,求得最大值
部分代码如下:

3、分析时间复杂度
分解子问题时间复杂度为O(1),求解子问题时间复杂度为2T(n/2),合并子问题算法时间复杂度为O(1)。根据主定理T(n)=2T(n/2)+O(n),得到最后的时间复杂度为O(nlogn).
三、对分治法的体会和思考
分治法实质上是把一个复杂的大问题,分解为许多相同规模的小问题,对小问题求解再合并就能求得的大问题的解。拆分与求解的过程往往会用到递归,分治法中比较重要的方面是递归,递归的使用也会让代码易懂和简洁,但是递归终止的情况需要考虑全面。