資料結構學習一 複雜度的表示與計算

2021-10-04 06:31:30 字數 1764 閱讀 4812

目錄

時間複雜度

推論解釋:

目的:分析過程

注意:以上所述時間複雜度均指最壞的時間複雜度

空間複雜度

推論解釋:

目的:分析過程

估算乙個演算法的執行時間,通過時間複雜度進行表示。

演算法執行時間相關因素

與演算法執行時間相關的因素:演算法選用的策略,問題的規模,編寫程式的語言,編譯產生的機器**的質量,計算機執行指令的速度。其中後三者受計算機硬體和軟體的制約,因此只考慮前兩條。

所謂問題的規模,就是演算法求解的輸入量。如:對n個號碼排序,n可稱為問題的規模;求n階矩陣的轉置,n可稱為問題的規模。

估算演算法執行時間

那麼,乙個演算法的執行時間如何估算?

分析:演算法都是由控制結構(順序、分支、迴圈三種)和原操作(對固有資料型別的操作,如:賦值、比較)構成的。演算法的執行時間可以看成是所有原操作的執行時間之和;計算表示式為:演算法輸入量*單次執行時間。

注意:多數情況下,計算最深層迴圈內的語句的執行時間之和就可以代表該演算法的執行時間的量級。

時間複雜度的計算

示例一:

**:

說明:

該語句只執行一次,沒有問題規模即演算法輸入量的影響。

那麼,上述**的執行時間就是執行一次的耗時。

時間複雜度表示為:t(n) = o(1)。

示例二:

**:

for(i=1; i

<=n; ++i)

說明:

迴圈內語句執行的次數受演算法的輸入量n影響,上述**的執行時間與演算法輸入量n成線性相關。

那麼,上述**的執行時間為:n*執行一次的耗時。

時間複雜度表示為: t(n) = o(n)。

示例三:

**:

for(i=1; i

<=n;  ++i )

}說明:

迴圈內語句執行的次數受演算法的輸入量n影響,上述**的執行時間與演算法輸入量n成平方比,因為外層迴圈n次,內層迴圈n次,迴圈內語句共執行n*n次。

那麼,上述**的執行時間為:n2*執行一次的耗時。

時間複雜度表示為: t(n) = o(n2)。

常見的時間複雜度

常數階 o(1),

對數階 o(log n),

線性階 o(n),

線性對數階 o(nlog n),

平方階 o(n2),

立方階 o(n3),

指數階 o(2n),

階乘階 o(n!)。

注意:以上時間複雜度,從上到下依次增長

了解空間複雜度。

空間複雜度的相關因素

與空間複雜度相關的因素:演算法本身的儲存空間,輸入資料的儲存空間,演算法在執行過程中臨時占用的儲存空間。其中,演算法本身的程式**所佔的儲存空間對不同的演算法而言沒有數量級的差距,不予考慮;演算法的輸入量與問題的規模相關,通常輸入資料所佔空間只取決於問題本身,和演算法無關,也可不予考慮;因此,只需要考慮演算法執行過程中臨時占用的儲存空間。

空間複雜度表示方式:

s(n) = o(f(n))

資料結構 時間複雜度與空間複雜度

演算法效率分兩種,時間效率和空間效率,即時間複雜度和空間複雜度,前者衡量演算法執行速度,後者衡量演算法所需要的額外空間 2.1基本概念 演算法中的時間複雜度是乙個函式,定量描述了演算法執行時間 總結下來就是 演算法種基本操作的執行次數 關注點 操作的數量級 基本操作的執行次數 執行時間和硬體資源強相...

資料結構2 演算法時間複雜度和空間複雜度的計算

演算法,即解決問題的方法。同乙個問題,使用不同的演算法,雖然得到的結果相同,但是耗費的時間和資源是不同的。就比如要擰乙個螺母,使用扳手還是鉗子是有區別的,雖然使用鉗子也能擰螺母,但是沒有扳手好用。條條大路通羅馬 解決問題的演算法有多種,這就需要判斷哪個演算法 更好 很多人誤以為程式就是演算法,其實不...

資料結構與演算法 時間複雜度與空間複雜度

解決乙個問題的方法可能有很多,但能稱得上演算法的,首先它必須能徹底解決這個問題 稱為準確性 且根據其編寫出的程式在任何情況下都不能崩潰 稱為健壯性 程式和演算法是完全不同的概念。演算法是解決某個問題的想法 思路 而程式是在根據演算法編寫出來的真正可以執行的 例如,要依次輸出一維陣列中的資料元素的值,...