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++/python