資料結構(一):資料結構的基本概念和演算法的時間和空間複雜度
阿新 • • 發佈:2019-01-28
資料結構討論的範疇
計算機技術的兩大支柱:1是資料結構,2是演算法。在某種程度上講,程式設計等同於資料結構+演算法。
程式設計是為計算機設計一組指令集,演算法是解決問題的策略,資料結構是模型。
問題包括:數值計算,解方程,
非數值計算的問題:計算機對弈,棋盤,棋子如何表示(模型),規則策略(演算法)
我們討論的是:實體的數學模型(非數值計算)及其上的操作如何在計算機上表示和實現。
相關概念
資料(Data):是資訊的載體,能夠被計算機識別、儲存和加工處理的數值、字元等。 資料元素(Data Element):是資料的基本單位。也稱為元素、結點、頂點、記錄。程式中作為一個整體來處理。 資料項(Data Item):有獨立含義的資料最小單位,也稱域(Field) 關鍵碼(key):起標識作用的資料項 資料物件(Data Object):是具有相同特性的資料元素的集合,是資料的一個子集。資料結構涉及的內容
1. 邏輯結構(Logical Structure):資料元素之間的邏輯關係。
2. 儲存結構(Storage Structure):資料元素及其關係在計算機儲存器內的表示
3. 施加在該資料結構上的操作
資料的邏輯結構
線性結構的邏輯特徵:有且僅有一個開始結點和一個終端結點,並且所有結點都最多隻有一個直接前趨和直接後繼。 非線性結構的邏輯特徵:一個結點可能有0,1,或者多個直接前趨和直接後繼。如:樹形、圖狀或者網狀、純集合。資料的儲存結構
順序儲存方法:把邏輯上相鄰的結點儲存在物理位置上相鄰的儲存單元裡,結點間的邏輯關係由儲存單元的鄰接關係來體現。 連結儲存方法:該方法不要求邏輯上相鄰的結點在物理位置上也相鄰,結點間的邏輯關係由附加的指標欄位表示。 索引儲存方法:在儲存結點資訊的同時,還建立附加的索引表。 雜湊儲存方法:根據結點的關鍵字直接計算出該結點的儲存地址。線性表是一種邏輯結構,若採用順序方法的儲存表示,則為順序表;若採用連結方法的儲存表示,則為連結串列;若採用雜湊方法的儲存表示,則為散列表;若對線性表上的插入、刪除運算限制在表的一端進行,則為棧;若對插入限制在表的一端進行,而刪除限制在表的另一端進行,則為佇列。
什麼是演算法?
演算法:通過資料結構解決某一特定問題的具體步驟的描述,是有限長的操作序列。 演算法特性: --有輸入:具有零個或多個輸入的外界量。 --有輸出:至少產生一個輸出。 --可行性:所有操作可以通過已實現的基本操作運算有限次實現 --有窮性:操作步驟有限,且每個步驟能在有限時間完成 --確定性:每條操作的含義都必須明確,無二義性。演算法評價
評價一個演算法的好壞一般從4個方面進行: --正確性:是指演算法是否正確; --執行時間:執行演算法所耗費的時間; --佔用空間:執行演算法所耗費的儲存空間; --簡單性:是指演算法的易讀性等。演算法效能分析與度量
演算法的效能標準: 正確性,可使用性,可讀性,效率,健壯性 演算法的後期測試 --#define n 自然數
MATRIXMLT(A,B,C)
float A[n][n],B[n][n],C[n][n];
{
int i,j,k;
(1) for ( i=0;i<n;i++) n
(2) for (j=0;j<n;j++) n^2
{
(3) C[i][j]=0; n^2
(4) for (k=0;k<n;k++) n^3
(5) C[i][j]= C[i][j]+A[i][k]*B[k][j] ; 2n^3
}
}/* MATRIXMLT */
該演算法中所有語句的頻度之和(即演算法的時間耗費)為:
T(n)=n+n2+n2+n3+2n3=3n3 +2n2+n
時間複雜度相應的數量級(階)按遞增排列 常數階O(1) 對數階O(log2n) 線性階O(n) 線性對數階O(nlog2n) 平方階O(n2) 立方階O(n3) 指數階O(2n)假定時間複雜性函式的時間單位為us