資料結構 時間複雜度

2022-07-31 10:54:12 字數 1818 閱讀 9252

在進行演算法分析時,語句總是執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,基座:t(n)=o(f(n)).它表示歲問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。

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

一般情況下,隨著n的增大,t(n)增長最慢的演算法為最優演算法。三個求和演算法的時間複雜度分別為o(n),o(1),o(n^2).我們分別給他們取了非官方的名臣,o(1)叫常數階、o(n)叫線性階、o(n^2)叫平方階。

推導大o階:

1、用常數1取代執行時間中的所有加法常數。

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

3、如果最高端項存在且不是1,則去除與這個項相乘的常數。得到的結果就是大o階。

例如 :

常數階:

這個演算法的執行次數函式是f(n)=3.根據我們推導大o階的方法,第一步就是把常數項3改為1.在保留最高端項時發現,他根本沒有最高端項,所以這個演算法的時間複雜度為o(1).

線性階:

對數階:

由於每次count乘以2之後,就距離n更近了乙份,也就是說,有多少個2相乘後大於n,則會推出迴圈,由2^x=n 得到x=log2n.所以這個迴圈的時間複雜度為o(logn).

平方階:

而對於外層的迴圈,不過是內部這個時間複雜度為o(n)的語句,再迴圈n次。所以這段**的時間複雜度為o(n^2).

那麼下面這個迴圈巢狀,它的時間複雜度是多少呢

由於當i=0時,內迴圈執行了n次,當i=1時,執行了n-1次,、、、當i=n-1時,執行了1次,所以總的執行次數為:

n+(n-1)+(n-2)+...+1=n(n+1)/2=n^2/2+n/2

用我們推導大o階的方法,第一條,沒有加法常數不予考慮;第二條,只保留最高端項,因此保留n^2/2

;第三條,去除這個項相乘的常數 ,也就是去除1/2,最終這段**的時間複雜度為o(n^2). 

常見時間複雜度一覽表:

常用時間複雜度所耗費的時間從大到小依次是:

最壞情況執行時間是一種保證,那就是執行時間將不會再壞了,在應用中,這是一種最重要的需求,通常,除非特別指定,我們提到的執行時間都是最壞情況的執行時間。

平均執行時間是所有情況中最有意義的,因為他是期望的執行時間。

演算法的空間複雜度是通過計算演算法所需的儲存空間實現,演算法時間複雜度的計算公式記作:s(n)=o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。

一般情況下,乙個程式在機器上執行時,除了需要儲存程式本身的指令、常數

變數和輸入資料外,還需要儲存對資料操作的儲存單元。若輸入資料所佔空間只取決於問題本身,和演算法無關,這樣只需要分析該演算法在實現時所需的輔助單元即可。若演算法執行時所需要的輔助空間相對於輸入資料量而言是個常數,則稱此演算法為原地工作,空間複雜度為o(1).

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

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

1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...

資料結構時間複雜度

如何衡量乙個演算法的複雜度?演算法的時間複雜度和空間複雜度統稱為演算法的複雜度 void test int n for int k 0 k 2 n k icount intcount 10 while count icount 這個函式執行次數為f n n n 2 n 10 時間複雜度實際就是乙個函...

資料結構 時間複雜度

一 演算法 是解決特定問題求解不走的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。1.正確性 演算法的正確性是指演算法至少應該具有輸入 輸出和加工處理無歧義性 能正確反映問題的需求 能夠得島問題的正確答案。2.可讀性 演算法設計的另一目的是為了方便閱讀 理解和交流。3.健壯性...