1. 程式人生 > >時間複雜度與空間複雜度

時間複雜度與空間複雜度

時間複雜度

時間複雜度: 由於機器裝置的優劣,相同的程式碼在不同的機器上執行的時間長短會有所不同,因此時間複雜度指的不是程式碼程式的執行時間。我們都知道一段程式碼中的語句執行的次數是一定的,次數越多,則花費的時間就會越多,因此,時間複雜度指的是一個演算法從開始執行到結尾過程中語句執行的次數。演算法的執行次數也成為時間複雜度。
時間複雜度的表述: 時間複雜度常用大O符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,即時間複雜度是一個估值。
做一些求時間複雜度的舉例:
(1)忽略常數項:
for(i=;i<N;i++)
{
printf("%d",i);
}
for(i=;i<5;i++)
printf(“haha”);
上面的程式碼的迴圈中程式碼執行次數為N次,迴圈外為5次,總共也就N+5次,當N較大時,5相對N來說就可以忽略不計。因此時間複雜度為O(N)。
(2)取高階(忽略低階項)且省略高階常數項係數:

for(M=0;M<2;M++)
for(i=0;i<N;i++)
{for(j=;j<N;j++)
printf("%d",i);
}
for(i=0;i<N;i++)
printf(“呵呵”);
for(i=;i<5;i++)
printf(“haha”);
該段程式碼的執行次數為2NN+N+5;同樣的常數項忽略不計,為2NN+N,取高階後為2NN我們又說時間複雜度在表示的時候省略首項係數,因此該段程式碼的時間複雜度為O(N^2);同樣時間複雜度為O(N3)的道理也是相同的。
常見的時間複雜度的比較:

O(1) O(log2) O(N) O(logN*N) O(N^2) O(N^3) O(2^N)
以上表述從左至右,時間複雜度從低到高。

空間複雜度

空間複雜度: 空間複雜度(Space Complexity)是對一個演算法在執行過程中臨時佔用儲存空間大小的量度,記做S(n)=O(f(n))。比如直接插入排序的時間複雜度是O(n^2),空間複雜度是O(1) 。而一般的遞迴演算法就要有O(n)的空間複雜度了,因為每次遞迴都要儲存返回資訊。當然隨著時代的發展,計算機不管是從記憶體還是到各方面的效能都有了極大的進步,因此保證空間複雜度也已經不是一個演算法或程式的側重點了。
空間的使用:
程式執行時所佔的空間分為以下兩個部分:
(1)固定部分。該部分主要包括指令空間(即程式碼空間)、資料空間(常量、簡單變數)等所佔的空間。這部分屬於靜態空間。
(2)可變空間,這部分空間的主要包括動態分配的空間,以及遞迴棧所需的空間等。這部分的空間大小與演算法有關。

相關推薦

關於時間複雜空間複雜總結

簡單來說,時間複雜度指的是語句執行次數,空間複雜度指的是演算法所佔的儲存空間。   一般情況下,隨著n的增大,T(n)增長最慢的演算法為最優演算法。 1.對於簡單的輸入輸出語句或賦值語句(無迴圈語句),近似認為需要 O(1)。一般來說,只要演算法中不存在迴圈語句,其時間複雜度就是 O(1)。

演算法分析之時間複雜空間複雜

演算法的評價指標主要是正確性,健壯性、可讀性和有效性4個方面,有效性又包括時間複雜度和空間複雜度。 演算法的時間複雜度和空間複雜度通常採用數量級的形式來表示,而數量的形式有常量階、對數階、線性階、線性對數階、平方階、立方階、指數階、階乘階等。若演算法的時間複雜度和空間複雜度

資料結構的時間複雜空間複雜、及相關證明

0. 有向圖無向圖的時空複雜度 圖的時空複雜度與其具體的表示形式有關,對於圖的鄰接表的表示形式,記 Adj[v] 為頂點 v 的出邊構成的列表。為了考量其空間複雜度,首先需要記錄全部的頂點,也即即使全部的頂點的出度均為0(頂點間相互孤立),仍然需要 O(V)

資料結構01--時間複雜空間複雜

時間複雜度 在進行演算法分析時,語句總的執行次數T(n)是關於問題規模n的函式,進而分析T(n)隨n的變化情況並確定T(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:T(n)=O(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演

Java中ArrayList和LinkedList區別以及時間複雜空間複雜

Java中ArrayList和LinkedList區別以及時間複雜度與空間複雜度? 一.時間複雜度 二.空間複雜度 三.總結    一般大家都知道ArrayList和LinkedList的大致區別: 1.ArrayList是實現了基於動態陣

時間複雜空間複雜

時間複雜度 時間複雜度: 由於機器裝置的優劣,相同的程式碼在不同的機器上執行的時間長短會有所不同,因此時間複雜度指的不是程式碼程式的執行時間。我們都知道一段程式碼中的語句執行的次數是一定的,次數越多,則花費的時間就會越多,因此,時間複雜度指的是一個演算法從開始執

演算法資料結構(一):時間複雜空間複雜

最近突然萌生了一個想法,好好系統的學習一下演算法與資料結構然後產生一系列的文章來回顧與總結學到的東西,這部分我想從最簡單的部分一一介紹總結,包括一些很基礎的內容 為什麼要學習資料結構與演算法 以前在學校的時候就知道 程式 = 演算法 + 資料結構,程式的作用是用來處理與解決現實問題,而在描述與解決現實問

時間複雜空間複雜,遞迴演算法

演算法複雜度分為時間複雜度和空間複雜度。下面摘錄其含義: 時間複雜度: 時間複雜度是指執行演算法所需要的計算工作量。 重點在其計算方法: 一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。 一般情況下,演算法的基本操作重複執行的次數是模組n的某一個函式f(n),因此,演算法的時間複雜

快速掌握演算法時間複雜空間複雜

# 前言 一個演算法的優劣好壞,會決定一個程式執行的時間、空間。也許當小資料量的時候,這種影響並不明顯,但是當有巨量資料的時候,演算法的好壞帶來的效能差異就會出天差地別。可以說直接影響了一個產品的高度和廣度。每個程式設計師都想用最優的演算法解決問題,我們期待自己寫出的程式碼是簡潔、高效的。但是如何評判一個演算

演算法的時間空間複雜(一看就懂)

演算法(Algorithm)是指用來操作資料、解決程式問題的一組方法。對於同一個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。 那麼我們應該如何去衡量不同演算法之間的優劣呢? 主要還是從演算法所佔用的「時間」和「空間」兩個維度去考量。 時間維

1、連結串列陣列、時間複雜空間複雜

1、記憶體中開闢空間:       C語言中:全域性、域、堆空間(malloc/new) 組織形式:      a、連續記憶體空間:申請一個數組,申連續記憶體      b、分散空間:申請次數無

[一步步學資料結構演算法 03]-時間空間複雜

一、什麼是複雜度分析? 1.資料結構和演算法解決是“如何讓計算機更快時間、更省空間的解決問題”。 2.因此需從執行時間和佔用空間兩個維度來評估資料結構和演算法的效能。 3.分別用時間複雜度和空間複雜度兩

「 資料結構演算法 1 」| 循序漸進理解時間複雜空間複雜

寫在之前 我們都知道,對於同一個問題來說,可以有多種解決問題的演算法。儘管演算法不是唯一的,但是對於問題本身來說相對好的演算法還是存在的,這裡可能有人會問區分好壞的標準是什麼?這個要從「時效」和「儲存」兩方面來看。 人總是貪婪的,在做一件事的時候,我們總是期望著可以付出最少的時間、精

演算法的時間空間複雜

演算法(Algorithm)是指用來操作資料、解決程式問題的一組方法。對於同一個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。 那麼我們應該如何去衡量不同演算法之間的優劣呢? 主要還是從演算法所佔用的「時間」和「空間」兩個維度去考量。

資料結構演算法(一):帶你瞭解時間複雜空間複雜到底是什麼?

1. 前言 演算法(Algorithm)是指用來操作資料、解決程式問題的一組方法。對於同一個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。那麼我們應該如何去衡量不同演算法之間的優劣呢? 主要還是從演算法所佔用的「時間」和「空間」兩個維度去考量。 時間

循序漸進帶你學習時間複雜空間複雜

本文字數:4894 字 閱讀本文大概需要:13 分鐘   寫在之前  我們都知道,對於同一個問題來說,可以有多種解決問題的演算法。儘管演算法不是唯一的,但是對於問題本身來說相對好的演算法還是存在的,這裡可能有人會問區分好壞的標準是什

資料結構(排序演算法和查詢演算法的時間複雜空間複雜

這是從大神給多的網站上找到的演算法的時間複雜度趨勢和各個常用結構的複雜度截圖。     演算法的時間複雜度,用來度量演算法的執行時間,記作: T(n) = O(f(n))。它表示隨著 輸入大小n 的增大,演算法執行需要的時間的增長速度可以用 f(n) 來描

常用排序演算法的時間複雜空間複雜及特點

一、常用排序演算法的時間複雜度和空間複雜度表格 二、特點 1.歸併排序: (1)n大時好,歸併比較佔用記憶體,記憶體隨n的增大而增大,但卻是效率高且穩定的排序演算法。 (2)歸併排序每次遞迴都要用到一個輔助表,長度與待排序的表長度相同,雖然遞迴次數是O(log2n),但每次

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

一、演算法的時間複雜度定義     在進行演算法分析時,語句總的執行次數T(n)是關於問題規模n的函式,進而分析T(n)隨n的變化情況並確定T(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度。記作:T(n)=O(f(

【資料結構和演算法】3~5 時間複雜空間複雜

演算法效率的度量方法 容易想到的方法是:把演算法跑若干次,然後拿個計時器在旁邊計時。這種方法被稱為“事後諸葛亮”方法,也稱為事後分析估算方法。 事前分析估算方法:在計算機程式比編寫前,依據統計方法對演算法進行估算。 通過總結,我們發現,一個高階語言編寫程式在計算機上執行所消耗的時間取決於