数据结构与算法(C++)-- 算法分析
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法(C++)-- 算法分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構與算法(C++)– 算法分析
算法分析包括:時間復雜度和空間復雜度分析。以下主要是時間復雜度的分析。
1、數學定義
- O 表示前面是后面的下界,后面是前面的上界
- Ω 表示前面是后面的上界,后面是前面的下界
2、運算法則
- 計算大O時,忽略低階項和常數因子。
- T(N) = O(N^2) = O(2N^2) = O(N^2+N)
- 可以用求極限 lim f(N)/g(N) 來確定 f(N) 和 g(N) 的相對增長率,必要時可以使用洛必達法則。
- 極限 = 0: f(N) = o(g(N) )
- 極限是常數但!= 0: f(N) = θ(g(N) )
- 極限 = 正無窮: g(N) = o(f(N) )
- 極限不存在:無關系
3、運行時間的計算
- 分析算法的時間復雜度時,不考慮內存訪問時間。
- 若無指定,所求的時間復雜度用最壞的情況表示
- 有時也會用平均時間來衡量,但通常準確計算平均時間比較困難
時間計算的一般法則:
- for 循環:O(N)
- 嵌套 for 循環(n層):O(N^n)
- 順序語句:各個語句的運行時間求和
- if/else 語句:判斷時間 + 兩者較長
時間復雜度排序:
4、最大子序列和
求一個序列中,連續元素和最大的子序列
int maxSubSum(const vector<int>& a) {int maxSum = 0; thisSum = 0;for(int i = 0; j<a.size(); ++j){thisSum += a[j];if(thisSum > maxSum)maxSum = thisSum;else if(thisSum < 0)thisSum = 0;}return maxSum }- 時間復雜度為 O(N)
- 如果當前序列和大于當前的最大子序列和,更新最大子序列和
- 如果序列和 < 0 表示這將不會對后面和做出任何貢獻,舍棄
總結
以上是生活随笔為你收集整理的数据结构与算法(C++)-- 算法分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 标准库类型 vector
- 下一篇: 数据结构与算法(C++)– 链表(Lin