學習筆記 演算法的時間複雜度

2021-10-07 15:23:23 字數 2427 閱讀 4347

排序也稱排序演算法(sort algorithm),排序是將一組資料,依指定的順序進行排列的過程。

內部排序: 指將需要處理的所有資料都載入到內部儲存器中進行排序。

外排序法: 資料量過大,無法全部載入到記憶體中,需要借助外部儲存進行 排序。

常見的排序演算法分類

一般情況下,演算法中的基本操作語句的重複執行次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n) / f(n) 的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作 t(n)=o( f(n) ),稱o( f(n) ) 為演算法的漸進時間複雜度,簡稱時間複雜度。

t(n) 不同,但時間複雜度可能相同。如:t(n)=n²+7n+6 與 t(n)=3n²+2n+2 它們的t(n) 不同,但時間複雜度相同,都為o(n²)。

度量乙個程式(演算法)執行時間的兩種方法

1)事後統計的方法:

這種方法可行, 但是有兩個問題:一是要想對設計的演算法的執行效能進行評測,需要實際執行該程式;二是所得時間的統計量依賴於計算機的硬體、軟體等環境因素,這種方式,要在同一臺計算機的相同狀態下執行,才能比較那個演算法速度更快。

2)事前估算的方法:

通過分析某個演算法的時間複雜度來判斷哪個演算法更優.

乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。乙個演算法中的語句執行次數稱為語句頻度或時間頻度,記為t(n)。

例如:計算1-100所有數字之和, 我們設計兩種演算法

//計算1-100所有數字之和

int sum=0;

int end=

100;

//使用for迴圈計算

for(int i=

1;i<=end;i++

)

t(n)=n+1

//直接計算

結論:1)2n+20 和 2n 隨著n 變大,執行曲線無限接近, 20可以忽略

2)3n+10 和 3n 隨著n 變大,執行曲線無限接近, 10可以忽略

結論:1)2n^2+3n+10 和 2n^2 隨著n 變大, 執行曲線無限接近, 可以忽略 3n+10

2)n^2+5n+20 和 n^2 隨著n 變大,執行曲線無限接近, 可以忽略 5n+20

結論:1)隨著n值變大,5n^2+7n 和 3n^2 + 2n ,執行曲線重合, 說明 這種情況下, 5和3可以忽略。

2)而n^3+5n 和 6n^3+4n ,執行曲線分離,說明多少次方式關鍵

用常數1代替執行時間中的所有加法常數 。 t(n)=n²+7n+6 => t(n)=n²+7n+1

修改後的執行次數函式中,只保留最高端項。 t(n)=n²+7n+1 => t(n) = n²

去除最高端項的係數。 t(n) = n² => t(n) = n² => o(n²)

說明:

平均時間複雜度是指所有可能的輸入例項均以等概率出現的情況下,該演算法的執行時間。

最壞情況下的時間複雜度稱最壞時間複雜度。一般討論的時間複雜度均是最壞情況下的時間複雜度。

這樣做的原因是:最壞情況下的時間複雜度是演算法在任何輸入例項上執行時間的界限,這就保證了演算法的執行時間不會比最壞情況更長。

平均時間複雜度和最壞時間複雜度是否一致,和演算法有關(如圖:)。

演算法時間複雜度空間複雜度

演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...

演算法 時間複雜度 空間複雜度

1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...

演算法的時間複雜度 空間複雜度

時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...