1. 程式人生 > >資料結構與演算法——基本概念與術語

資料結構與演算法——基本概念與術語

概述


 資料、資料元素、資料物件

資料(data)是對客觀事物的符號表示,在電腦科學中是指所有能輸入到計算機中並被計算機程式處理的程式的總稱。

資料元素(data element)是資料的基本單位,在計算機程式中通常作為一個整體進行考慮和處理。一個數據元素可由若干個資料項(data item)組成。資料項是資料的不可分割的最小單位。

資料物件(data object)是性質相同的資料元素的集合,是資料的一個子集。

如此表,這兩張表都是資料,除此之外,圖片、音訊、視訊都是資料的一種。

資料物件是性質相同資料元素的集合。學生表可以看成是一個數據物件,同理,成績表也是一個數據物件。

兩張表的每一行都可以看作是一個數據元素。

每一行的每一列就是一個數據項(即學號、姓名、科目、成績、年齡就是一個個的資料項)。

資料結構

資料結構是相互之間存在一種或多種特定關係的資料元素的集合。資料結構就是研究資料在程式中的組織方式。

資料結構型別有如下幾種:

1.集合(set)結構中的資料元素之間除了“同屬於一個集合”的關係外,別無其他關係。

2.線性結構(linear structure)結構中的資料元素之間存在一個對一個的關係。

3.樹形結構(tree structure)結構中的資料元素存在一個對多個的關係。

4.圖形結構(graphic structure)結構中的資料元素之間存在多個對多個的關係。

物理結構/儲存結構

資料結構在計算機中的表示(又稱映像)稱為資料的物理結構,又稱儲存結構。它包含資料元素的表示和關係的表示。

資料結構之間的關係在計算機中有兩種不同的表示方法:順序映像和非順序映像,並由此得到兩種不同的儲存結構,順序儲存結構和鏈式儲存結構。順序儲存結構中,線性表的邏輯順序和物理順序總是一致的。但在鏈式儲存結構中,線性表的邏輯順序和物理順序一般是不同的。

演算法

程式=資料結構+演算法

說完資料結構,再來看一下演算法

演算法是對特定問題求解步驟的一種描述,他是指令的有限序列,其中每一條指令表示一個或多個操作(演算法解決問題的步驟)

演算法的五個特性:

1.有窮性  一個演算法必須對任何合法輸入都在執行有窮步後結束,且每一步都必須在有窮時間內完成。

2.確定性  演算法的每一條指令必須有確切的含義,讀者在閱讀時不會產生二義性。並且,在任何條件下,演算法只能由惟一的一條執行路徑,即對於相同的輸入只能得到相同的輸出。

3.可行性  演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現。

4.輸入  一個演算法有零個或多個輸入。

5.輸出  一個演算法有一個或多個輸出。

演算法設計的要求

一個“好”的演算法應考慮達到以下目標,以下目標也是一個演算法的評價標準

1.正確性、2.可讀性、3.健壯性、4.效率與低儲存量需求

其中,最重要衡量演算法優劣的就是複雜度。

複雜度

複雜度包括時間複雜度和空間複雜度。時間複雜度就是指演算法的執行次數,並非執行時間。空間複雜度就是演算法執行過程中要佔用的最大記憶體。隨著計算機記憶體容量的逐步擴大,相對來說,現在更加看重演算法的時間複雜度.

時間複雜度

一個演算法是由控制結構(順序、分支和迴圈3種)和原操作(指固有資料型別的操作)構成的,時間複雜度取決於兩者的綜合結果。

一般情況下,演算法的基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間度量記作T(n)=O(f(n)),它表示隨問題規模n的增大,演算法執行時間的增加率和f(n)的增長率相同,稱做演算法的漸進時間複雜度,簡稱時間複雜度。可以理解為“O”來表示數量級的概念。

多數情況下它是指最深層迴圈內的語句的原操作,它的執行次數和包含它的語句的頻度相同。語句的頻度指的是該語句重複執行的次數。