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

2021-10-02 23:18:42 字數 2188 閱讀 9614

簡言之就是先讓程式在電腦上跑一下,在旁邊弄乙個計時器進行計數,這樣它到底執行了多長時間我們就知道了,這種方法可行,我們可以知道執行了多久,但是問題是同乙個程式在計算機上執行時,執行同乙個程式,執行同乙個任務,它占用的時間實際上和計算機當時的很多狀況有關係,比如計算機當時的記憶體占用情況,還有當時cpu的占用情況,等等,甚至還和這台計算機本身有很大的關係,因此,用這種事後統計的方法實際上是不可行的。

事前分析估算的方法,簡言之,就是當我們的演算法寫好以後,我們人為的去估算這個演算法所需要的時間。那麼事前估算的話我們肯定是估算不了的,因為在不同的電腦上執行出來,它占用的時間肯定是不一樣的。所以如果我們事前估算演算法的優劣的話,我們的單位肯定不是時間了,也就是說我們並不是用時間來衡量演算法的優劣。那麼我們用什麼來衡量呢?我們衡量乙個演算法實際上從兩方面,乙個是時間複雜度,乙個是空間複雜度。簡單的說,時間複雜度就是我這個演算法在計算的時候它要占用多長時間。那空間複雜度就是說我這個演算法在執行的時候需要占用多少記憶體。我們在執行乙個演算法的時候,在大多數情況下,當我們在不考慮空間的情況下,大部分的情況下,我們在說這個演算法的複雜度的時候,都是在考慮演算法的時間複雜度。

語句頻度:乙個演算法中的語句執行次數稱為語句頻度,記為t(n)。

從上圖中可以看出,2n+20和3n+10的區別主要就是2n和3n的區別,常數項可以

忽略。

從上圖中可以看出,以上四個函式只有兩種走向,主要就是2n^2和n^2的區別,一次項和常數項則可以省略。

從上圖中可以看出,3n^2 和 5n^2是最下邊一條線重合了,n^3和6n^3都呈現上公升的趨勢,都在迅速向上走,6n^3更加傾斜,可以直接看出,以上四個函式其實就是n^2跟n^3之間的區別。

總結:從以上三幅圖中可以看出,各個函式之間其實真正起作用的,是那個對我們函式值影響最大的值。

時間複雜度:一般情況下,演算法中的基本操作語句的重複執行次數是問題規模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^2+5n+6與t(n)=3n^2+3n+2,它們的t(n)不同,但時間複雜度相同,都為o(n^2)。

計算時間複雜度的方法:

用常數1代替執行時間中的所有加法常數

修改後的執行次數函式中,只保留最高端項

去除最高端項的係數。

平均時間複雜度和最壞時間複雜度:

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

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

空間複雜度:空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)=o(f(n))。比如直接插入排序的時間複雜度o(n^2),空間複雜度是o(1) 。而一般的遞迴演算法就要有o(n)的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法的執行時間和所需要占用的儲存空間兩個方面衡量。

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

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

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

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...

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

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...