1. 程式人生 > >演算法:演算法的概述和演算法時間複雜度分析

演算法:演算法的概述和演算法時間複雜度分析

演算法:演算法的概述和演算法時間複雜度分析

我是一名在校大學生,學習到了演算法這門課程,想整理一些筆記和大家分享,各位大佬不喜勿噴,僅供參考,希望能對大家有所幫助。


演算法,什麼是演算法

它是求解問題的一系列計算步驟,用來將輸入的資料轉換成輸出結果。我總結關於演算法,有一個三五計劃,這裡的三五計劃不是指高考模擬題,而是指——演算法有5個設計目標、5個重要特性以及5個基本步驟。

演算法和資料結構的聯絡和區別
聯絡:資料結構是演算法設計的基礎。演算法的操作物件是資料結構,在設計演算法時通常要構建適合這種演算法的資料結構。資料結構設計主要是選擇資料的儲存方式,演算法設計就是在選定的儲存結構上設計一個滿足要求的好演算法。
區別

:資料結構關注的是資料的邏輯結構、儲存結構和基本操作,而演算法更多的是關注如何在資料結構的基礎上解決實際問題。演算法是程式設計思想,資料結構則是這些思想的邏輯基礎。

演算法具有以下5個設計目標

  • 正確性:要求演算法能夠正確的執行預先規定的功能和效能要求。
  • 可使用性:要求演算法能夠很方便的使用。
  • 可讀性:演算法應該易於人的理解,可讀性好。
  • 健壯性:要求演算法具有很好的容錯性,提供異常處理,能夠對不合理的資料進行檢查,不經常出現異常中斷或宕機現象。
  • 高效率與低儲存量需求:演算法的效率主要指演算法的執行時間。

演算法具有以下5個重要特性

  • 有限性
    :一個演算法必須總是在執行有限步之後結束,且每一步都可在有限時間內完成。
  • 確定性:演算法中的每一條指令都必須有確切的含義,不會產生二義性。
  • 可行性:演算法中的每一條運算都必須是足夠基本的,也就是說它們在原則上都能精確的執行。
  • 輸入性:一個演算法有零個或多個輸入。
  • 輸出型:一個演算法有零個或多個輸出。

演算法具有以下5個基本步驟

  • 分析求解問題:確定求解問題的目標、給定的條件和生成的結果。
  • 選擇資料結構和演算法設計策略
  • 描述演算法
  • 證明演算法的正確性
  • 演算法分析

演算法時間複雜度的分析

評價演算法效率通常有兩種衡量方法:事後統計法

事前分析估演算法。前者存在兩個缺點:1.必須執行程式需。2.存在其他因素掩蓋演算法本質。
一個演算法是由控制結構(順序、分支和迴圈)和原操作(固有資料型別的操作)構成,演算法的執行時間取決於兩者的綜合效果。
如表格所示的演算法Solve,其中形參a是一個m行n列的陣列,當是一個方陣(m=n)時求主對角線的所有元素之和並返回true,否則返回false,從中可以看到,包含兩個順序結構,一個分支結構和一個迴圈結構。

bool Solve(double a[][MAX],int m,int n,double &s){
int i;s=0; 順序結構
if(m!=n) return false; 分支結構
for(i=0;i<m;i++) s+=a[i][i]; 迴圈結構
return true;} 順序結構

設演算法的問題規模為n,以基本語句為基準統計出的演算法執行時間是n的函式,用f(n)表示。對於表中所示的演算法,當m=n時演算法中for迴圈內的語句為基本語句,它恰好執行n次,所以有f(n)=n。
這種時間衡量方法得出的是一種增長趨勢的度量,只考慮當問題規模n充分大時演算法中基本語句的執行次數在漸進意義下對的階,通常使用Θ、Ο、Ω這3種漸進符號表示。