Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)
Algorithm:C++語(yǔ)言實(shí)現(xiàn)之求最大連續(xù)子數(shù)組(暴力法、分治法、分析法、動(dòng)態(tài)規(guī)劃法)
?
?
?
目錄
求最大連續(xù)子數(shù)組
T1、code暴力法 ?O(n3)
T2、分治法 ? O( n*log(n) )
T3、分析法 ? O(n)
T4、動(dòng)態(tài)規(guī)劃法 ?O(n)
?
?
?
?
?
求最大連續(xù)子數(shù)組
給定一個(gè)數(shù)組A[0,…,n-1],求A的連續(xù)子數(shù)組,使得該子數(shù)組的和最大。
例如,數(shù)組: 1, -2, 3, 10, -4, 7, 2, -5;最大子數(shù)組:3, 10, -4, 7, 2
T1、code暴力法 ?O(n3)
時(shí)間復(fù)雜度O(n3)
?
T2、分治法 ? O( n*log(n) )
將數(shù)組從中間分開(kāi),那么最大子數(shù)組要么完全在左半邊數(shù)組,要么完全在右半邊數(shù)組,要么跨立在分界點(diǎn)上。
完全在左數(shù)組、右數(shù)組遞歸解決。
跨立在分界點(diǎn)上:實(shí)際上是左數(shù)組的最大后綴和右數(shù)組的最大前綴的和。因此,從分界點(diǎn)向前掃,向后掃即可。
分治算法復(fù)雜度
?
T3、分析法 ? O(n)
邏輯推理的算法應(yīng)用
?
?
T4、動(dòng)態(tài)規(guī)劃法 ?O(n)
記S[i]為以A[i]結(jié)尾的數(shù)組中和最大的子數(shù)組則:S[i+1] = max(S[i]+A[i+1], A[i+1])
S[0]=A[0]
遍歷i: 0≤i ≤n-1
動(dòng)態(tài)規(guī)劃:最優(yōu)子問(wèn)題
時(shí)間復(fù)雜度:O(n)
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AI:人工智能概念之机器学习中常用算法的
- 下一篇: Algorithm:C++语言实现之字符