美文网首页
求最大子列和问题 分治法

求最大子列和问题 分治法

作者: 周末的游戏之旅 | 来源:发表于2019-08-01 09:40 被阅读0次

分治法思想:

递归计算前半部分的最大子列和,递归计算后半部分的最大子列和,然后计算跨前后两个区域的最大子列和,这三个子列和进行比较即可。

前后的计算比较好理解,横跨两个区域的比较难想到,其实不难,只要知道必须过的路径就好办了,横跨两个区域的最大子列必过-2和-1,只要计算以-2为尾的最大子列和,然后加上以-1为首的最大子列和即可。

时间复杂度分析:

共有N个数的话,前半部分的最大子列和与后半部分的最大子列和均为T(N/2),横跨区域的最大子列和是从中间向左向右扫描,每个元素都被扫描一次,因此是N的常数倍,所以时间复杂度为o(N);

总时间复杂度是:

T(N)=2T(N/2)+cN,T(1)=O(1)。

所以T(N/2)=2T(N/4)+cN/2,带入原公式得

T(N)=2[2T(N/4)+cN/2]+cN

对此公式进行展开,一直展开至T()括号内的值为1,假设共展开了K次

则,T(N)=2^kO(1)+ck*N, N/2k=1,也就是N=2k,k=log2 N

所以T(N)=NO(1)+cN*log2 N

复杂度计算加法时,取最大的一个,所以取N*log2 N。

相比交优化算法的O(N^2),分治算法的N*log2 N效率大大提高

相关文章

  • 求最大子列和问题 分治法

    分治法思想: 递归计算前半部分的最大子列和,递归计算后半部分的最大子列和,然后计算跨前后两个区域的最大子列和,这三...

  • leetcode 刷题初体验

    开始喜欢上刷题,也愿意在一个问题上不断寻求最优解比如求最大子序和这道题从O(n2)到O(n)再到分治法求解(分治法...

  • 分治法求最大子数组和

    求最大子数组和,采用分治的方法实现,先把数组用中点分为左右两个子数组,这样最大和子数组存在三种情况:(1)在左边的...

  • 分治策略

    求解递归式方法 最大子数组问题 分治策略 分治法流程 伪代码 C++实现 线性解 流程 代入法求解递归式 递归树法...

  • 第四章 分治策略

    本章介绍分治法,首先通过前两节最大子数组、矩阵乘法两个问题说明分治法的一般步骤:分解,解决,合并。当子问题需要递归...

  • 10《算法入门教程》分治算法之最大子数组问题

    1. 前言 本节内容是分治算法系列之一:最大子数组问题,主要讲解了什么是最大子数组问题,如何利用分治算法解决最大子...

  • 用分治法求最大子项

    算法导论中的伪代码转换而来的Java语言实现的求最大子项的实现

  • 求最大子列和

  • 求最大子列和

    第一种:最简单的解法:把所有子列都算一遍找到最大的 第二种:采用分治法,运用递归来解决。(使用了分治一般O(N2)...

  • 求最大子列和问题 优化算法

    先看一下前面的传统算法: 时间复杂度为:T(N)=O(N^3),显然该算法虽然简单易懂,但是时间复杂度太高。 分析...

网友评论

      本文标题:求最大子列和问题 分治法

      本文链接:https://www.haomeiwen.com/subject/fvwfdctx.html