資料結構學習(三) 演算法描述及分析

2021-10-02 12:55:29 字數 1566 閱讀 1470

1. 有窮性:在有窮步之後結束,演算法能夠停機

2. 確定性:無二義性

3. 可行性: 可通過基本運算有限次執行來實現,也就是演算法中的每乙個動作能夠被機器的執行

4. 有輸入:表示存在資料處理

5. 有輸出:表示存在資料處理

返回值   演算法對應的函式名(形參列表)

返回值: 通常為bool 型別,表示演算法是否成功執行

形參列表:由輸入型引數(演算法輸入)和輸出引數(演算法輸出)構成

(1)cpu時間-----時間效能分析

(2)記憶體空間-----空間效能分析

演算法分析目的:分析演算法的時空效率以便改進演算法效能

1. 事後分析統計方法:編寫演算法對應程式,統計其執行時間

不能用絕對執行時間進行比較原因: 編寫程式的語言不同;執行程式的環境不同;其他原因。

2. 事前估算分析方法:撇開上述因素,認為演算法的執行時間是問題規模n的函式

求出演算法所有原操作的執行次數(也稱為頻度),它是問題規模n的函式,用t(n)表示

演算法執行時間大致 = 原操作所需的時間 x t(n) 。所以t(n)與演算法的執行時間成正比

為此可用 t(n) 表示演算法的執行時間

比較不同演算法的 t(n)大小得出演算法執行時間的好壞

演算法的執行時間用時間複雜度來表示

演算法中執行時間 t(n) 是問題規模 n 的某個函式 f(n),記作:t(n) =o( f(n) )

o表示隨問題規模 n 的增大演算法執行時間的增長率和 f(n) 的增長率相同

時間複雜度本質上講,是一種 t(n) 最高數量級的比較。也就是只求出t(n)的最高端,

忽略其低階項和常係數

演算法中的基本操作一般是最深層迴圈內的原操作

演算法執行時間大致 = 基本操作所需的時間 x 其運算次數

在演算法分析時,計算 t(n) 時僅僅考慮基本操作的運算次數

空間複雜度:用於量度乙個演算法在執行過程中臨時占用的儲存空間大小

一般也作為問題規模n 的函式,採用數量級形式描述,記作:s(n) =o(g(n))

原地工作或就地工作演算法:若乙個演算法的空間複雜度為 o(1)

臨時占用的儲存空間:指的是函式體內分配的空間

演算法中臨時分配的變數個數與問題規模 n 無關

遞迴演算法分析—也稱為變長時空分析

非遞迴演算法分析—也稱為定長時空分析

常數階:乙個沒有迴圈的演算法的執行時間與問題規模 n 無關,記作 o(1)

線性階:乙個只有一重迴圈的演算法的·執行時間與問題規模 n 的增長率呈線性增大關係,記作 o(n)

平方階o(n2) 、立方階o(n3) 、對數階o(log2 n) 、指數階o(2n)等

o(1) < o(log2n) < o(n) < o(nlog2n) < o(n2) < o(n3) < o(2n) < o(n!)

資料結構學習筆記 演算法分析

演算法分析方法 時間複雜度 空間複雜度 乙個演算法是由控制結構 順序,分支和迴圈 和原操作構成的。void fun int a,int n for i 0 i n i 4 演算法的執行時間取決於控制結構和原操作的綜合效果,如果for迴圈迴圈次數很多,哪怕原操作很快,時間也會比較長,即使只有乙個順序結...

資料結構學習(三) 演算法的評估

演算法評價 評估,評測 稱為演算法分析,為使評價更加客觀,合理,往往需要從幾個不同的角度對演算法的綜合性能進行評價。評價方法 演算法的有效性 演算法的有效性指演算法的執行效率,也就是演算法投入執行時,將耗用多少時間,占用多少儲存空間 演算法的時間複雜度 時間單位 每執行一條基本語句耗用乙個時間單位 ...

資料結構學習 棧的陣列描述

從今天開始阿偉要學習棧啦!首先補充乙個小知識點,引用作為函式形參 首先給出棧的抽象類 template class t class stack 析構函式 virtual bool empty const 0 返回true,當且僅當棧為空 virtual intsize const 0 返回棧中元素個...