第1章 導論
為甚麼要學資料結構?
計算機科學家
維爾特
(Niklaus Wirth, 1934/2/15~)
於1975年寫了一本書,書名為
“Algorithms
Data Structures
Programs”
( 演算法
資料結構
程式 )
程式設計師必須有資料結構的基礎,才能撰寫出優良
的程式。
+
資料結構 (DATA STRUCTURE)的定義
計算機系統中資料的「組織方式」及 「存取運算方法」 探討如何將資料有系統地安排組織配合適當的演算法以 達到最佳化的處理結果。 設計資料結構時主要考量: 1. 如何產製 (create) 儲存結構 2. 如何儲存 (store)資料 3. 如何取出 (retrieve) 資料 4. 有哪些運算 (operator) 資料結構 10 50 1060 50 60演算法(ALGORITHM)的定義
在有限步驟內解決問題的方法或程序
。
Donald E. Knuth(高德納) 提出五個基本要素:
1. 輸入指令 (input):零個或一個以上的輸入資料。 2. 輸出指令 (output):一個或一個以上的結果輸出。 3. 明確性 (definiteness):指令必須明確不混淆。 4. 有限性 (finiteness):在有限步驟內執行結束。 5. 有效性 (effectiveness):又稱可行性。描述演算法的方法
使用自然語言 ( 中文、英文……等 )
數學式
程式語言
流程圖 (flowchart)
虛擬碼 (pseudo-code)
演算法範例
-- 以
自然語言描述
求兩實數相減之絕對值
解:
(1) 輸入兩個實數 a 與 b 的值。
(2) 設定實數 c 值為 a
b。
(3) 如果 ( c < 0 ) 成立,
則實數 c 設定為
c。
(4) 輸出實數 c 的值
。演算法範例
-- 以
流程圖描述
開始 輸入a, b兩實數 c = a - b ( c < 0 )? c = - c 輸出c 結束 是 否求兩實數相減之絕對值
解:
(1) 輸入兩個實數 a 與 b 的值。
(2) 設定實數 c 值為 a
b。
(3) 如果 ( c < 0 ) 成立,
則實數 c 設定為
c。
(4) 輸出實數 c 的值
。演算法範例
--以
C 語言
描述
開始 輸入a, b兩實數 c = a - b ( c < 0 )? c = - c 輸出c 結束 是 否求兩實數相減之絕對值
程式的效能分析
好程式的條件
執行結果正確
可維護性高
執行效率高
1) 執行時間(run time)的長短:簡略以程式執行的敘 述多寡(頻率計數)來測量 2) 儲存變數資料所需的記憶體空間大小 電腦執行結果要對! 程式碼容易看懂! 執行時間要短、 記憶體用得少!頻率計數(FREQUENCY COUNT)
可執行的敘述才會影響程式的執行時間
頻率計數
1. 計算程式敘述被執行的總次數 2. 用來評估程式的執行時間,以判斷演算法的優劣。 10範例
計算 N 位學生的總平均分數
程 式 執行次數
float avg(float score[], int n) {
int i;
float sum, average; if( n <= 0)
average = 0; else{
sum = 0;
for(i=0; i<n; i++) sum += score[i]; average = sum / n; } return average; } 1 1 1 n+1 n 1 1 執行總次數 2n+6