第二章 演算法

2022-06-12 15:45:09 字數 2104 閱讀 4356

一、演算法定義

二、演算法的時間複雜度與空間複雜度

1.定義:演算法是解決待定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

2. 演算法的特性

演算法有五個基本特性:輸入輸出有窮性確定性可行性

演算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果,演算法的每個步驟被精確定義而無歧義。

3. 演算法設計的要求

演算法不是唯一的,同乙個問題,可以有很多種解決問題的演算法。好的演算法應該具有以下幾點要求:

演算法的「正確」通常在語法上有很大的差別,大體分為以下四個層次。

演算法程式沒有語法錯誤;

演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果;

演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果;

演算法程式對於精心選擇的,甚至刁難的測試資料都有滿足要求的輸出結果。

一般情況下,我們把層次 3 作為演算法是否正確的標準。

我們寫**的目的,一方面是為了讓計算機執行,另一方面是為了便於他人閱讀,讓人理解和交流,自己將來也可能閱讀,如果可讀性不好,時間長了自己都不知道寫了什麼,可讀性是演算法好壞的乙個很重要的標誌

時間效率高和儲存量低

時間效率指的是演算法的執行時間,對於同乙個問題,如果有多個演算法可以解決,執行時間短的演算法效率高,執行時間長的效率低。儲存量需求指的是演算法在執行過程中需要的最大儲存空間,主要指演算法程式執行時所占用的記憶體或外部硬碟儲存空間。設計演算法應該盡量滿足時間效率高儲存量低的需求

綜上,好的演算法,應該具有正確性可讀性健壯性高效性低儲存量的特點。

4. 函式的漸進增長

例子 1:

a 演算法與 b 演算法,a 演算法要做 2n+3 次操作;b 演算法要做 3n+1 次操作。問哪個執行的更快?

由上圖可知,當 n = 1,演算法 a 效率不如演算法 b;當 n = 2 時,兩者效率相同;當 n > 2 時,演算法a開始優於演算法 b了。得出結論,加法常數可以忽略

例子 2:

c 演算法與 d 演算法,c 演算法要做 4n+8 次操作;d 演算法要做 2 n*n +1 次操作。問哪個執行的更快?

由上圖可知,當 n <= 3 時,演算法 c 差於演算法 d;當 n > 3 時,演算法 c 的優勢開始越來越優於演算法 d 了。得出結論:與最高次項相乘的常數並不重要

1. 演算法時間複雜度

這樣用大寫 o() 來體系那演算法時間複雜度的記法,我們稱之為大 o 記法。

一般情況下,隨著n的增大,t(n) 增長最慢的演算法為最優演算法

得到的結果就是大 o 階

2.演算法空間複雜度

一般情況下,乙個程式在機器上執行時,除了需要儲存程式本身的指令、常數、變數和輸入資料外,還需要儲存對資料操作的儲存單元。若輸入資料所佔空間只取決於問題本身,和演算法無關,這樣只需要分析該演算法在實現時所需的輔助單元即可。若演算法執行時所需的輔助空間相對於輸入的資料量而言是個常數,則稱此演算法為原地工作,空間複雜度為 o(n)。

通常,我們都使用「時間複雜度」來指執行時間的需求,使用「空間複雜度」指空間需求。當不用限定詞地使用「複雜度」時,通常都是指時間複雜度

第二章 演算法

本章內容了解即可。如果大家對資料結構完全不了解,我建議你先去看一下b站上郝斌老師的課程。演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的優先序列,並且每條指令表示乙個或多個操作。只聽資料結構課程,當然可以,但是聽完後你可能沒有什麼感覺,因為你不知道他是幹嘛的。但是如果配合演算法來講解,你就...

演算法第二章

小結 第二章主要內容是遞迴與分治思想。遞迴演算法是乙個直接或間接地呼叫自己的演算法。有典型的遞迴例子 階乘函式 斐波那契數列還有漢諾塔等。遞迴演算法的優點是結構清晰,可讀性強,缺點是執行效率低,耗費的計算時間和占用的儲存空間都比非遞迴演算法要多。而分治法的基本思想是將要求解的較大規模的問題分割成k個...

第二章 演算法基礎

引言 演算法導論 在本章將向我們介紹乙個演算法設計和分析框架,在後續的章節也將在這個框架的基礎上來分許演算法。名詞解釋 1 偽 偽 就是以最清晰 最簡潔的表示方法來說明演算法,而忽略資料抽象 模組性和錯誤處理的問題 2 迴圈不變式 每次迴圈從陣列a中取出第j個元素插入有序數列a 1 j 1 然後遞增...