資料結構概論和時間複雜度的簡單求法

2021-09-01 05:14:16 字數 1692 閱讀 1716

1 基本概念和術語

2 四種資料結構

3 資料結構的形式定義

data_structure = (d,s)

d——資料元素的有限集

s——d上關係的有限集

4 演算法及評價

演算法是解決某一特定型別問題的有限運算序列。

演算法的時間複雜度是衡量乙個演算法好壞的重要指標。

時間複雜度是指演算法中所包含簡單操作執行次數的數量級。

語句的頻度是需要精確計算演算法中某一語句執行的次數。

演算法花費的時間與演算法中語句的執行次數成正比,乙個演算法中的語句執行次數稱為語句頻度或時間頻度,記為t(n),也叫做問題規模。一般情況下,演算法中基操作重複執行的次數是問題規模n的某個函式,用t(n)表示。

按數量級遞增排列,常見的時間複雜度有:

常數階o(1)

對數階o(log2n)

線性階o(n)

線性對數階o(nlog2n)

平方階o(n^2)

立方階o(n^3)

例1:

for(i=0;i例1中的時間複雜度計算方法:

首先找最裡層的迴圈,發現x++這段**應該是迴圈次數最多的語句,根據兩層迴圈的迴圈量計算x++語句的頻度:

n * 2n = 2n^2 = o(n^2)

則該例子的時間複雜度為:o(n^2) 例2

int fn(int n)

return n*fn(n-1);

}

例2中不存在迴圈標識for,while等,但是卻是遞迴函式,本身就具備迴圈含義,這樣一來,就需要把遞迴函式轉化為迴圈函式之後再用迴圈標識來計算時間複雜度。

一般計算項為:

fn(n) = fn(n-1)*n;

可轉化為:

int fn(n)

return s;

}

這樣一來,就可以輕鬆得到時間複雜度為:o(n)

例3:

i=1;

while(i<=n)

迴圈語句為i=i*2,一層迴圈,執行頻度計算方法為:2^t<=n->t = log2n

則該例子的時間複雜度為:log2n

例4:for(int i=0;i此例子中,共兩層迴圈,最裡層語句為a[i][j] = i * j,執行頻度為 m * n次,但是它的時間複雜度應改為o(n^2),因為這兩個n是不一樣的含義的,m*n中的n是此處實實在在執行次數的n,而o(n^2)表示的是問題規模的n,也就是說m * n中的m和n都演化為問題規模的n,從而得到o(n^2)這個結果。

計算時間複雜度的一般方法:

(1)找迴圈標識for,while的關鍵字

(2)如果是遞迴函式,先將遞迴函式化為迴圈函式

(3)找出每一層迴圈的迴圈量

(4)計算最裡層迴圈語句的頻度

(5)取數量級最大的最為時間複雜度

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

1 演算法o n 關注n的階數,當數十分大的時候,常數可以忽略。o n 又稱為大o記法。2 t n o f n 隨著n變化而變化,f n 是某個函式,執行的次數等於時間,一般情況下,t n 增長最慢的演算法最優。4 推到o n 1,用1取代時間中所有加法常數 哪些可以忽略 2,在修改後的執行函式中,...

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

通常我們衡量乙個演算法的複雜度時,會有兩種演算法效率分析方式 第一種是時間效率,第二種是空間效率。時間效率被稱為時間複雜度,而空間效率被稱作空間複雜度。時間複雜度主要衡量的是乙個演算法的執行速度,空間複雜度主要衡量一乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小。所以對空間複雜...

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

演算法 algorithm 是對特定問題求解步驟的一種描述。解決乙個問題往往有不止一種方法,演算法也是如此。那麼解決特定問題的多個演算法之間如何衡量它們的優劣呢?有如下的指標 1 時間複雜度 執行這個演算法需要消耗多少時間。2 空間複雜度 這個演算法需要占用多少記憶體空間。同乙個問題可以用不同的演算...