資料結構學習筆記 2 資料結構與演算法

2021-10-04 20:21:16 字數 2695 閱讀 9598

四.演算法設計的要求

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

六.函式的漸近增長

*七.演算法時間複雜度

八.常見的時間複雜度

九.最壞情況與平均情況

十.演算法空間複雜度

資料結構是底層,演算法高層。資料結構為演算法提供服務。演算法圍繞資料結構操作。

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

1.輸入輸出

演算法具有零個或多個輸入

演算法至少又1個或多個輸出

2.有窮性

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

3.確定性

確定性:演算法的每乙個步驟都具有確定的含義,不會出現二義性。

4.可行性

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

1.正確性

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

演算法的"正確"可分為以下幾個層次

1.演算法程式沒有語法錯誤。

2.演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果。

3.演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果。

3.演算法程式對於精心挑選的,甚至刁難的測試資料都有滿足要求的輸出結果。

2.可讀性

3.健壯性

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

時間效率高:對於同乙個問題,如果有多個演算法能夠解決,執行時間短的演算法效率高,執行時間長的效率低。

儲存量低:演算法執行過程中所需要的最大儲存空間。

設計演算法應該盡量滿足時間效率高和儲存量低的需求。

1.事後統計方法

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

這種方法的缺陷

1.必須依據演算法事先編制好程式

2.時間的比較依賴計算機硬體和軟體等環境因素。

3.程式的執行時間與測試資料的規模有很大關係

2.事前分析估算方法

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

經分析發現,程式在計算機上的執行時間消耗取決於以下因素

1.演算法採用的策略,方法(演算法好壞的根本)

2.編譯產生的**質量(軟體支援)

3.問題的輸入規模

4.機器指令的執行速度(硬體效能)

測定執行時間最可靠的方法就是計算對執行時間有消耗的基本操作的執行次數。執行時間跟這個計數成正比。

函式的漸近增長:給定兩個函式f(n)和g(n),如果存在乙個整數n,使得對於所有的n>n,f(n)總比g(n)大,那麼,我們說f(n)的漸近增長快於g(n)。

判斷乙個演算法的效率時,函式中的常數和其他次要項常常可以忽略,而更應該關注主項(最高端項)的階數。

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

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

2.推導大o階方法

推導大o階

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

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

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

得到的結果就是大o階

3.常數階

在保留最高端項時發現沒有最高端項,這個演算法時間複雜度就是o(1)。

4.線性階

分析時間複雜度關鍵是分析迴圈結構的運**況

for

(int i=

0;i)

像這種從某個常數到n的迴圈時間複雜度就為o(n)。

5.對數階

例如

int count =1;

while

(count

這樣的程式執行次數就是2x=n,可以得到x=log2n所以時間複雜度為o(log n)。

6.平方階

存在最高端項,且最高端不為1,除去其他項和最高端項的係數,得到的就是平方階,時間複雜度為o(nx),x代表最高端項階數。

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

最壞情況執行時間是一種保證,就是執行時間不會再壞了。通常,除非特別指定,我們說的執行時間都是最壞情況的執行時間。

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

時間複雜度一般都指最壞時間複雜度

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

《資料結構》學習筆記(2)

類的定義體現了抽象資料型別的思想,可以用以支援說明與實現的分離,將抽象資料型別的實現封裝在類的內部,使達到資訊隱蔽的目標。include using namespace std class point ostream point operator ostream strm,point p 或poin...

資料結構學習筆記2

資料結構 第二章 chapter 1線性表線性儲存 引入 線性結構的定義 若結構是非空有限集,則有且僅有乙個開始結點和乙個終端結點,並且所有結點都最多只有乙個直接前趨和乙個直接後繼。可表示為 a1 a2 an 線性結構表示式 a1 a2 an 線性結構的特點 只有乙個首結點和尾結點 除首尾結點外,其...

資料結構學習筆記2

演算法和演算法分析 演算法 是為了解決某類問題而規定的乙個有限長的操作序列 演算法具有的五個特性 有窮性 有限步驟,有限時間 確定性 不產生二義性 可行性 基本操作運算執行有限次來實現 輸入 有零個或者多個輸入 輸出 有乙個或者多個輸出 評價演算法優劣的基本準則 正確性,可讀性 易於理解,相互交流 ...