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

定义

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

递归方程

分治问题最重要的就是递归方程,能看出来基本划分方式以及时间复杂度。
如归并排序的递归方程为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,那么可以通过直接比较这两项的增长速度即可得到结论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值