分治思想简介&最大子数组算法

本文介绍了分治思想的基本定义,通过归并排序和快速排序为例阐述了递归方程及其求解方法,包括猜解、递归树和主方法。接着,文章详细讨论了最大子数组问题,提出通过分治策略来解决这一问题,分析了其时间复杂度,并探讨了动态规划的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

将原来的问题划分成相同性质、规模更小的一些个子问题。
如:归并排序,将一个数组拆分成两个、四个、直到最后只剩一个元素,然后反过来合并。

递归方程

分治问题最重要的就是递归方程,能看出来基本划分方式以及时间复杂度。
如归并排序的递归方程为T(n)=2T(n/2)+O(n)
其中T(n)是原问题的时间,T(n/2)是一半问题的时间,所以要乘2,O(n)是归并两个子序列需要的时间,为O(n),那么如果采用的是快排,那么这里就应该是O(1)了。
快排中有和归并排序的比较,分析了为什么同样是nlong但是快排更胜一筹。

递归方程的求解

三种方法:猜、递归树、主方法
第一个不多说,就是凭借着自己的经验,大约猜一个(可能是一个范围),然后需要证明。肯定是快,但有时候确实不好猜。

递归树
之前看递归方程的时候,基本公式:T(n)=aT(n/b)+O(……)
我们用次可以得到一个树,如:
在这里插入图片描述
满a叉树,每一个结点都是原来规模的n/4,一直到叶子结点的T(1),至于每一个非叶子节点的数值为一次划分的代价(这里面是O(n2),所以为平方项)
将每一层的结点相加,可以看到是一个等比数列,树高为logbn(这里面为log4n)
而叶子节点那层,应该为3log4n,是利用换底公式才得到最终的结果的。
在这里插入图片描述
很明显,最后等比数列求和的结果也就是余项O(n^2)的一个倍数,对整体的时间复杂度没有影响
而nlog43我们可以从中得到一个公式,nlogba,那么可以通过直接比较这两项的增长速度即可得到结论。

主方法

这个的思想就是递归树最后的想法,只不过是单独那出来总结成一个结论。
在这里插入图片描述
定义看看就好了,主要的思想也就是nlogba和θ(g(n))的比较。
这里注意一下,nε 是一个限制,限制了两个的差距必须要是多项式,即是是n0.2也行。
而如果是nlogn和n这样的两个,主方法是用不了的,因为log的增长速度比任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值