在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。
演算法的時間複雜度,也就是演算法的時間度量,記作:t(n) = o(f(n))。
它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。
這樣用大寫o()來體現演算法時間複雜度的記法,我們稱之為大o記法。
一般情況下,隨著n的增大,t(n)增長最慢的演算法為最優演算法。
常見的時間複雜度:
常用的時間複雜度所耗費的時間從小到大依次是:
o(1) < o(㏒n) < o(n) < o(n㏒n) < o(n²) < o(n³) < o(2^n) < o(n!) < o(nⁿ)
1.用常數1取代執行時間中的所有加法常數。
2.在修改後的執行次數函式中,只保留最高端。
3.如果最高端項存在且不是1,則去除與這個項相乘的常數。
最後得到的結果就是大o階。
例1:
上圖總共執行了3次,這個演算法的執行次數函式是f(n) = 3。按照推導大o階的方法1,應該用1來取代常數項3,所以該函式的時間複雜度為o(1)。
如上圖,總共執行了12次,但是不管執行了多少次,只要執行的次數是恆定的,不會隨著n的變大而發生變化,其時間複雜度都是o(1)。
線性階就是平常常見的迴圈結構。
例:
如上圖**,因為迴圈體中的**要執行n次,所以它的迴圈的時間複雜度為o(n)。
例:
如上圖,由於每次count乘以2之後,就距離n更近了一步,直到大於n退出迴圈。所以2^x= n,得到x = ㏒₂n,所以這個迴圈的時間複雜度為o(㏒n)。
雙層迴圈巢狀是最簡單明瞭時間複雜度為o(n²)的演算法,如下圖**。
如果外層迴圈的迴圈次數改為了m,時間複雜度就變為o(m × n)。
ps:大部分摘抄於《大話資料結構》
最近在看這本書,很多知識原理講的很通俗易懂,很適合初學者和鞏固基礎的人,強烈推薦。
演算法時間複雜度計算
本部落格主要講解下演算法時間複雜度的基本計算過程。演算法時間複雜度是指演算法中基本操作的執行次數。記為t n o f n t n 為增長比最快項的係數。計算步驟 舉例說明 例1 void funfirst int n step1 基本操作是 j i 2 step2 確定規模,根據迴圈條件,確定規模為...
演算法時間複雜度的計算
定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 求解演算法的時間複雜度的具體步驟是 1 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。2 計算基本語句的執行次數的數量級 ...
演算法時間複雜度的計算
一 概念 時間複雜度 總運算次數表示式中受到n的影響最大的那一項 二 概念解釋 由於機器執行環境等的影響,的運算時間並不能準確的測算出來。但是,運算之間和演算法中語句的執行次數是成正比的,所以可以用語句之行次數來表徵時間複雜度的大小 三 計算方法 在計算演算法的時間複雜度的時候,先找出基本操作,再根...