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 返回棧中元素個...