時間複雜度 空間複雜度 演算法基礎

2021-10-23 01:20:06 字數 1683 閱讀 2855

1空間複雜度——演算法的空間效能分析

(1)演算法的空間效能的影響因素

• 指令空間(由機器決定)

•資料空間(常量,變數占用空間)

•環境棧空間

(2)度量方法

單個常量,變數:由機器和編譯器規定的型別儲存決定。

陣列變數:所佔空間等於陣列大小乘以單個陣列元素所佔的空間。

結構變數:所佔空間等於各個成員所佔空間的累加

例如:double a[100]所需空間為100×8=800

int matrix[r][c]所需空間為2·r·c

2時間複雜度——演算法的時間效能分析

(1)演算法的時間效能的影響因素:

•機器的執行速度(執行**的速度)

•書寫程式的語言

•編譯產生**的質量

•演算法的策略

•問題的規模

(2)度量方法

時間複雜性分為最好時間複雜性,最壞時間複雜性,平均時間複雜性。解決乙個問題的所有演算法中,時間複雜性最好的那個演算法的時間複雜性定義為問題的時間複雜性。

各種語句的程式步數:

•注釋:程式步數為0

•宣告語句:程式步數為0,包括定義常數和變數的語句,使用者自定義資料型別的語句,確定訪問許可權的語句,指明函式特徵的語句。

•表示式:若表示式中不包含函式的呼叫,則程式步數為1;如果表示式包括函式呼叫,程式步數要包括分配給函式呼叫的程式步驟。

•賦值語句:《變數》=《表示式》的程式步數為1.但如果賦值語句中變數是陣列或字串(字元陣列),則賦值語句的程式步數等於變數的體積加上表示式的程式步數。

•迴圈語句:若僅考慮迴圈控制部分,則有三種形式:

①while《表示式》do…

②do … while《表示式》

③for(《初始化語句》;《表示式1>;《表示式2>)…

①和②控制部分的程式步數等於《表示式》的程式步數。③控制部分第一次執行的程式步數等於《初始化語句》與《表示式1>的程式步數之和,後續執行的程式步數等於《表示式1>和《表示式2>程式步數之和。

•switch語句:

switch(《表示式》)

首部switch(《表示式》)的程式步數等於表示式具有的程式步數;執行乙個條件的程式步數等於它自己的程式步數加上它前面的所有條件計算的程式步數。

•if_then語句:

if(《表示式》)《語句1>;

else(《語句2>);

分別將《表示式》,《語句1>,《語句2>的程式步數分配給,每一部分。如果else部分不出現,則這部分沒有時間開銷。

•函式執行語句/函式呼叫語句:函式呼叫語句的程式步數為0,其時間開銷計入函式執行語句。函式執行語句的程式步數一般為1.

•動態儲存管理語句

•轉移語句:這類語句包括continue,break,goto,return和return《表示式》,程式步數一般為1,但是若return《表示式》中《表示式》的程式步數為例項特性函式,則其程式步數為《表示式》的程式步數。

時間複雜度的例題

演算法時間複雜度空間複雜度

演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...

演算法 時間複雜度 空間複雜度

1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...