資料結構與演算法 2 演算法

2021-10-07 03:18:24 字數 2693 閱讀 5405

目錄

一.演算法的定義

二.演算法的特性

1.輸入輸出

2.有窮性

3.確定性

4.可行性

三.演算法設計的要求

1.正確性

2.可讀性

3.健壯性

4.時間效率高和儲存量低

四.演算法效率的度量方法

1.事後統計方法

2.事前估計分析方法

五.演算法時間複雜度.

1.演算法時間複雜度定義

2.推導大o階方法

3.常數階

4.線性階

5.對數階

6.平方階

六.常見的時間複雜度

七.最壞情況與平均情況

八.演算法空間複雜度

1.演算法定義:

演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作

演算法具有五個基本特性:輸入、輸出、有窮性、確定性和可行性

1.輸入輸出

演算法具有零個或多個輸入 ,至少有乙個或多個輸出

2.有窮性

有窮性:指演算法在執行有限的步驟之後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成

3.確定性

確定性:演算法的每一步驟都具有確定的含義,不會出現二義性。演算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果。演算法的每個步驟被精確定義而無歧義。

4.可行性

可行性:演算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成。

1.正確性

(1)定義:

正確性,演算法的正確性是指演算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需求、能夠得到問題的正確答案

(2)演算法的「正確」大體分為四個層次:

2.可讀性

3.健壯性

4.時間效率高和儲存量低

好的演算法還應該具備時間效率高和儲存量低的特點,設計演算法應該盡量滿足時間效率高和儲存量低的需求

1.事後統計方法

事後統計方法:這種方法主要是通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低

這種方法有很大缺陷,通常不予採納

2.事前估計分析方法

事前分析估算方法:在計算機程式編制前,依據統計方法對演算法進行估算。

(1)乙個用高階程式語言編寫的程式在計算機上執行時所消耗的時間取決於下列因素:

(2)事前估算方法的理論依據,通過演算法時間複雜度來估算演算法時間效率1.演算法時間複雜度定義

(1)定義:

演算法時間複雜度表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式

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

2.推導大o階方法

推導大o階方法:

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

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

(3)如果最高端項存在且不是1,則去除與這個項相乘的常數。

得到的結果就是大o階。」

3.常數階o(1)

int sum =

0,n =

100;

/* 執行一次 */

sum =(1

+ n)

* n /2;

/* 執行一次 */

printf

("%d"

, sum)

;/* 執行一次 */

4.線性階o(n)
int i;

for(i =

0; i < n; i++

)」

5.對數階o(log2n)
int count =1;

while

(count < n)

計算運算次數

由2x=n得到x=log2n

6.平方階o(n2)

int i, j;

for(i =

0; i < n; i++

)}

執行次數

函式階非正式術語

15o(1)

常數階2n+5

o(n)

線性階3n2+2n+1

o(n2)

平方階5log2n+20

o(logn)

對數階2n+3nlog2n+19

o(nlogn)

nlog2n

6n3+5n2+2

o(n3)

立方階2n

o(2n)

指數階(1)常用的時間複雜度所耗費的時間從小到大依次是:

o(1)2)3)n)n)

(1)平均執行時間是所有情況中最有意義的,因為它是期望的執行時間

(2)對演算法的分析,一種方法是計算所有情況的平均值,這種時間複雜度的計算方法稱為平均時間複雜度

(3)另一種方法是計算最壞情況下的時間複雜度,這種方法稱為最壞時間複雜度。一般在沒有特殊說明的情況下,都是指最壞時間複雜度(1).演算法空間複雜度的計算公式記作:

s(n)=o(f(n))

其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式

(2).通常,我們都使用「時間複雜度」來指執行時間的需求,使用「空間複雜度」指空間需求

資料結構與演算法(2)

程式設計 資料結構 演算法 資料元素 是組成資料的 有一定意義的基本單位,在計算機中通常作為整體處理。資料項 乙個資料元素可以由若干個資料項組成。資料項是資料不可分割的最小單位。資料物件 是性質相同的資料元素的集合,是資料的子集。資料結構 是相互之間存在一種或多種特定關係的資料元素的集合。邏輯結構 ...

資料結構與演算法(2)

鏈結參考 資料結構是相互之間存在一種或多種特定關係的資料元素的集合 那麼具體是什麼關係呢,或者說,這裡的結構又是指什麼呢?按照視點的不同,我們把資料結構分為邏輯結構和物理結構 1,邏輯結構 是指資料物件中資料元素之間的相互關係 邏輯結構分為以下四種 2,物理結構 是指資料的邏輯結構在計算機中的儲存形...

資料結構與演算法2

資料邏輯結構分為線性結構與非線性結構,線性結構分為線性表,棧,佇列,字串,陣列,廣義表 非線性結構主要分為樹形和圖形棧佇列 1只能插入表尾,刪除表尾 1.插在表尾,刪除表頭 xianjin 2.後進先出 2.先進先出 3.例如十進位制轉換,檢驗括號是否匹配 4.棧的資料型別定義 初始化 銷毀 判斷是...