第一章

緒論

基本的概念和術語

數據和數據結構

數據是對客觀事物的符號表示, 在計算機科學中是指所有能輸入到計算機中並被計算機程序處理的符號的總稱.

數據元素是數據的基本單位, 在計算機程序中通常作爲一個整體進行考慮和處理.

數據對象是性質相同的數據元素的集合, 是數據的一個子集.

數據結構是相互之間存在一種或多種特徵關係的數據元素的集合. 在任何問題中, 數據元素都不是孤立存在的, 而是在它們之間存在着某種關係, 這種數據元素之間關係稱之爲結構.

根據數據元素的不同關係, 通常有如下4中基本結構:
1. 集合: 結構中的數據元素之間除了同屬於一個集合的關係外, 沒有任何其他關係
2. 線性結構: 結構中的數據元素之間存在一對一的關係
3. 樹形結構: 結構中的數據元素之間存在一對多的關係
4. 圖狀結構: 結構中的數據元素之間存在多對多的關係

數據元素之間的關係在計算機中有兩種不同的表示方法:
+ 順序映像: 藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關係
+ 非順序映像: 藉助元素存儲地址的指針表示數據元素之間的邏輯關係

並由此得到兩種不同的存儲結構: 順序存儲結構和鏈式存儲結構. 任何一個算法的設計取決於選定的數據(邏輯)結構, 而算法的實現依賴於採用的存儲結構.

數據類型

數據類型是和數據結構密切相關的概念, 用以刻畫程序操作對象的特性. 在用高級程序語言編寫的程序中, 每個變量, 常量或表達式都有一個它所屬的確定的數據類型. 這個類型顯式或隱式的規定了在程序執行期間變量或表達式所有可能的取值範圍, 以及在這些值上允許進行的操作. 因此, 數據類型是一個值得集合和定義在這個值集上的一組操作的總稱.

按照”值”的不同特性, 高級程序語言中的數據類型可分爲兩類:
+ 非結構的原子類型: 值不可分解, 例如C語言中的基本類型, 指針類型和空類型
+ 結構類型: 例如數組

抽象數據類型是指一個數學模型以及定義在該模型上的一組操作. 抽象數據類型的定義僅取決於它的一組邏輯特性, 而與其在計算機內部如何表示和實現無關, 即不論其內部結構如何變化, 只要它的數學特性不變, 都不影響其外部使用.

數據類型的表示和實現

抽象數據類型可以通過已有的數據類型來表示和實現, 利用處理器中已經存在的數據類型來說明新的結構, 用已經實現的操作來組合新的操作.

算法和算法分析

算法是對特定問題求解步驟的一種描述, 它是指令的有限序列, 其中每一條指令表示一個或多個操作. 算法執行時間需要通過依據該算法編制的程序在計算機上運行時所消耗的時間來度量. 因爲同一個算法在不同的語言, 機器上執行的時間不同, 所以在衡量算法效率的時候, 需要撇開這些, 可以認爲一個特定算法”運行工作量”的大小, 只依賴於問題的規模(通常用整數量n表示), 即算法的效率是問題規模的函數

時間複雜度

一個算法是由控制結構(順序,分支和循環)和原操作構成, 則算法時間取決於兩者的綜合效果. 爲了便於比較同一問題的不同算法, 通常的做法是從算法中選取一種對於所研究的問題來說是基本操作的原操作, 以該基本操作重複執行的次數作爲算法的時間量度. 一般情況下, 算法中基本操作重複執行的次數是問題規模n的某個函數, 算法的時間度量記爲:

T(n)=O(n)

它表示隨着問題規模n的增大, 算法執行時間的增長率和n的增長率相同, 稱爲算法的漸進時間複雜度, 簡稱時間複雜度.

代碼語句的頻度指的是該語句重複執行的次數. 例如一個單個語句的頻度是1, 則其時間複雜度就是O(1) , 一個for循環的需要被執行n次, 頻度就是n, 時間複雜度就是O(n) , 兩個嵌套的for循環需要被執行n2 次, 時間複雜度就是O(n2) .

在更加複雜的算法中, 我們就需要考慮最壞情況下的時間複雜度作爲該算法的複雜度.

空間複雜度

一個程序除了需要存儲空間來寄存本身所用的指令, 常數, 變量和輸入數據外, 也需要一些對數據進行操作的工作單元和存儲一些爲實現計算所需信息的輔助空間.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章