ch1 數據結構緒論
書使用C90標準代碼,推薦使用vs系列編輯器
1.4 基本概念和術語
數據:能被計算機識別並輸入給計算機處理的符號集合
數據元素:是組成數據的、有一定意義的基本單位,在計算機中通常作爲整體處理
數據項:一個數據元素可以由若干個數據項組成
數據對象:性質相同的數據元素的集合,是數據的子集
數據結構:相互之間存在一種或多種特定關係的數據元素的集合
1.5 邏輯結構與物理結構
邏輯結構:集合結構、線性結構、圖結構、樹結構
物理結構:順序存儲結構、鏈式存儲結構
1.6 抽象數據類型
抽象數據類型ADT ,Abstract Data Type
ADT標準格式如下:
ADT 抽象數據類型名
Data
數據元素之間邏輯關係的定義
operation
操作1
初始條件
操作結果描述
操作2
……
操作n
……
endADT
ch2 算法
數據結構和算法關係:通過數據結構解決算法問題
算法定義:算法是解決特定問題求解步驟的描述,在計算機中表現爲指令的有限序列,並且每條指令表示一個或多個操作。
算法的特性:輸入、輸出、有窮性、確定性、可行性
p.s. 可以沒有輸入,但一定要有輸出
算法設計的要求:正確性、可讀性、健壯性、時間效率高、存儲量低
p.s. 正確性層次
1 算法程序沒有語法錯誤
2 算法程序對於合格的輸入數據能夠產生滿足要求的輸出結果
3 算法程序對於非法的輸入數據能夠得出滿足要求的輸出結果(通常要求)
4 算法對於特殊的測試數據由滿足要求的輸出結果
算法效率的度量方法:事後統計方法、事前分析估計方法(取決於問題輸入規模和算法好壞)
函數的漸近增長:給定兩個函數f(n)和g(n),如果存在一個整數N,使得對於所有的n>N,f(n)總是比g(n)大,那麼我們說f(n)的增長漸近快於g(n)
判斷算法效率時通常只關注主項階數 //由主項階數判斷函數的漸近增長
算法時間複雜度:T(n)=O(f(n)) 隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同
大O記法,推導方法:
1 用常數項取代所有加法常數
2 修改後的運行次數函數後,只保留最高階項
3 如果最高階項存在且不是1,則去除與這個項相乘的常數
常數項O(1)<對數階O(logn)<線性階O(n)<nlogn階O(nlogn)<平方階O(n^2)<立方階O(n^3)<指數階O(2^n)<階乘階O(n!)<O(n^n)
最壞情況:一般算法時間複雜度均指最壞情況
算法空間複雜度:S(n)=O(f(n))
p.s. 這本書沒有考慮算法的空間複雜度,但是在實際情況中空間複雜度還是很重要的