1. 程式人生 > >資料結構(一):資料結構的基本概念和演算法的時間和空間複雜度

資料結構(一):資料結構的基本概念和演算法的時間和空間複雜度

資料結構討論的範疇

計算機技術的兩大支柱:1是資料結構,2是演算法。在某種程度上講,程式設計等同於資料結構+演算法。

程式設計是為計算機設計一組指令集,演算法是解決問題的策略,資料結構是模型。

問題包括:數值計算,解方程,

非數值計算的問題:計算機對弈,棋盤,棋子如何表示(模型),規則策略(演算法)

我們討論的是:實體的數學模型(非數值計算)及其上的操作如何在計算機上表示和實現。

相關概念

資料(Data):是資訊的載體,能夠被計算機識別、儲存和加工處理的數值、字元等。 資料元素(Data Element):是資料的基本單位。也稱為元素、結點、頂點、記錄。程式中作為一個整體來處理。 資料項(Data Item):有獨立含義的資料最小單位,也稱域(Field) 關鍵碼(key):起標識作用的資料項 資料物件(Data Object):是具有相同特性的資料元素的集合,是資料的一個子集。 

資料結構涉及的內容

1. 邏輯結構(Logical Structure):資料元素之間的邏輯關係。 2. 儲存結構(Storage Structure):資料元素及其關係在計算機儲存器內的表示 3. 施加在該資料結構上的操作

資料的邏輯結構

線性結構的邏輯特徵:有且僅有一個開始結點和一個終端結點,並且所有結點都最多隻有一個直接前趨和直接後繼。 非線性結構的邏輯特徵:一個結點可能有0,1,或者多個直接前趨和直接後繼。如:樹形、圖狀或者網狀、純集合。

資料的儲存結構

順序儲存方法:把邏輯上相鄰的結點儲存在物理位置上相鄰的儲存單元裡,結點間的邏輯關係由儲存單元的鄰接關係來體現。 連結儲存方法:該方法不要求邏輯上相鄰的結點在物理位置上也相鄰,結點間的邏輯關係由附加的指標欄位表示。 索引儲存方法:在儲存結點資訊的同時,還建立附加的索引表。 雜湊儲存方法:根據結點的關鍵字直接計算出該結點的儲存地址。

   線性表是一種邏輯結構,若採用順序方法的儲存表示,則為順序表;若採用連結方法的儲存表示,則為連結串列;若採用雜湊方法的儲存表示,則為散列表;若對線性表上的插入、刪除運算限制在表的一端進行,則為棧;若對插入限制在表的一端進行,而刪除限制在表的另一端進行,則為佇列。


什麼是演算法?

演算法:通過資料結構解決某一特定問題的具體步驟的描述,是有限長的操作序列。 演算法特性: --有輸入:具有零個或多個輸入的外界量。 --有輸出:至少產生一個輸出。 --可行性:所有操作可以通過已實現的基本操作運算有限次實現 --有窮性:操作步驟有限,且每個步驟能在有限時間完成 --確定性:每條操作的含義都必須明確,無二義性。

演算法評價

評價一個演算法的好壞一般從4個方面進行: --正確性:是指演算法是否正確; --執行時間:執行演算法所耗費的時間; --佔用空間:執行演算法所耗費的儲存空間; --簡單性:是指演算法的易讀性等。

演算法效能分析與度量

演算法的效能標準: 正確性,可使用性,可讀性,效率,健壯性 演算法的後期測試 --
在演算法中的某些部位插裝時間函式 time( ) --測定演算法完成某一功能所花費時間 演算法的事前估計 --空間複雜度 --時間複雜度 空間複雜度度量:儲存空間的固定部分--程式指令程式碼的空間,常數、簡單變數等變數所佔空間 和 可變部分--尺寸與例項特性有關的成分變數所佔空間、引用變數所佔空間、遞迴棧所用空間、通過new和delete命令動態使用空間 時間複雜度度量:編譯時間和執行時間(獨立於機器的軟硬體、假設每條語句的時間是單位時間、語句的頻度)
#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