Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)
生活随笔
收集整理的这篇文章主要介绍了
Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)
目录
求最大连续子数组
T1、code暴力法 O(n3)
T2、分治法 O( n*log(n) )
T3、分析法 O(n)
T4、动态规划法 O(n)
求最大连续子数组
给定一个数组A[0,…,n-1],求A的连续子数组,使得该子数组的和最大。
例如,数组: 1, -2, 3, 10, -4, 7, 2, -5;最大子数组:3, 10, -4, 7, 2
T1、code暴力法 O(n3)
时间复杂度O(n3)
T2、分治法 O( n*log(n) )
将数组从中间分开,那么最大子数组要么完全在左半边数组,要么完全在右半边数组,要么跨立在分界点上。
完全在左数组、右数组递归解决。
跨立在分界点上:实际上是左数组的最大后缀和右数组的最大前缀的和。因此,从分界点向前扫,向后扫即可。
分治算法复杂度
T3、分析法 O(n)
逻辑推理的算法应用
T4、动态规划法 O(n)
记S[i]为以A[i]结尾的数组中和最大的子数组则:S[i+1] = max(S[i]+A[i+1], A[i+1])
S[0]=A[0]
遍历i: 0≤i ≤n-1
动态规划:最优子问题
时间复杂度:O(n)
总结
以上是生活随笔为你收集整理的Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: AI:人工智能概念之机器学习中常用算法的
- 下一篇: Algorithm:C++语言实现之字符