數據結構與算法(二)—— 大O表示法

算法的定義

  • 算法是對某個問題求解步驟的描述,是指令的有限序列。
  • 算法與數據結構緊密聯繫,在設計算法前要肯定相應的數據結構。
  • 最後,算法與數據的規模也息息相關,當數據規模越大是越能提現各類算法的性能。

算法性能的分析和度量

時間複雜度

時間複雜度:算法

  • 因爲算法的執行時間取決於算法的結構和原操做(最影響算法性能的代碼實現),因此一個算法執行時間的計算是很艱難的。所以,經過計數算法原操做的重複執行的次數做爲算法的時間度量,引入「漸進時間複雜度」估計算法的執行時間來分析算法。而算法的表示方式則用大O表示法。

大O表示法的定義:若是存在兩個正常數cn0,使得對全部的n,n >= n0,有T(n)<= cF(n)。則有 T(n) = O(F(n))數據結構

  • 經過比較T(n)和F(n)的相對增加率來分析算法。例如:T(n)=1000*n,F(n)=n^2,當n>=1000(就是上面定義的n0)時,F(n)T(n)更快的增加率。大O表示法:1000*n=O(n^2)T(n) = O(n^2)
  • 咱們能夠這樣理解T(n) = O(f(n)),T(n)以永遠不快於F(n)的速度增加,F(n)是T(n)的一個上界。例如: 當T(n) = 2n^2,則能夠T(n) = O(n^3)T(n) = O(n^2)T(n) = O(n^3),這些等式以不快於F(n)的定義來講都是成立的,但咱們要選擇一個儘量接近的T(n) = O(n^2)

O表示法的計算性能

若是T1(n) = O(f(n)),T2(n) = O(g(n)),則有:.net

  1. T1(n) + T2(n) = max(O(f(n)) + O(g(n))),即T(n) = n^4 + n^2 + 3 = O(n^4)
  2. T1(n) * T2(n) = O(f(n) * g(n)),即T(n) = n^4 * n^2 + 3 = O(n^6)

注意:在計算大O表示時,低價項和常數項能夠被忽略。設計

常見的大O表示法及表明的算法(從快到慢排列)3d

  • O(1)
  • O(log n),也叫對數時間,如二分查找算法。
  • O(n),也叫線性時間,如遍歷n個規模的數查找。
  • O(n * log n),如快速排序算法
  • O(n^2),如選擇排序、冒泡排序。
  • O(n!),一種很是慢的算法

空間複雜度

空間複雜度是一個操做或者一個程序從開始到結束所需的空間存儲大小。 包括如下兩部分:排序

  • 固定部分:主要包括程序代碼、常量、簡單變量、定長成分的結構變量所佔的空間。
  • 可變部分:算法的規模大小影響操做所需的存儲空間大小
相關文章
相關標籤/搜索