1 / 14

一、導論

一、導論. 1-1. 資料與資訊 1-2. 演算法與資料結構. 1-1 資料與資訊. 資料結構的功能 需要將人類所能了解的語言轉換成 機械化 的動作,以便交由電腦 來處理。 機械化的動作包含 資 訊 ( 資料 ) 與動作 ( 控制 ) 範例 人類的語言 : 求出全班的平均 電腦的動作 : (1) 將全班的 成績 加起來 (2) 將加起來的 成績 除以全班的人數. 人類自然語言. 輸入. 資料結構的功能 轉成機械化的動作. 處理. 演算法 … …. 輸出. 1-2 演算法與資料結構. 演算法的特性 輸入 : 準確描述

Download Presentation

一、導論

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 一、導論 1-1. 資料與資訊 1-2. 演算法與資料結構

  2. 1-1 資料與資訊 • 資料結構的功能需要將人類所能了解的語言轉換成機械化的動作,以便交由電腦來處理。 • 機械化的動作包含資訊(資料)與動作(控制) • 範例人類的語言: 求出全班的平均電腦的動作:(1) 將全班的成績 加起來(2) 將加起來的成績 除以全班的人數 人類自然語言 輸入 資料結構的功能 轉成機械化的動作 處理 • 演算法 • … • … 輸出

  3. 1-2 演算法與資料結構 • 演算法的特性 • 輸入: 準確描述 • 指令: 明確性 • 正確性: 演算法的正確性 • 有限性: 演算法的步驟需要於一定的步驟內完成 • 輸出: 正確性與描述

  4. 1-2 演算法與資料結構 • 範例: 求出兩個數的最大公因數 • 自然的語言(1) 輸入兩個自然數(2) 輾轉相除直到除數為零(3) 除數就是最大公因數 (輸出) • 演算法的步驟(1) 輸入 A, B(2) R 為 A / B 的餘數(3) 如果 R 為零, 則到 (5) – 把前一個除數取出的動作(4) 設定 A←B, B← R, 回到 (2)(5) B 就是最大公因數 輸入的描述不夠明確 輾轉相除的動作描述不夠明確 輸出的描述不夠明確

  5. 1-2 演算法與資料結構 • 驗證演算法的正確性 • 輸入 A, B • R 為 A / B 的餘數 • 如果 R 為零, 則到 (5) • 設定 A←B, B← R, 回到 (2) • B 就是最大公因數

  6. 1-2 演算法與資料結構 • 流程圖基本符號 (Flow Chart) start 處理 輸入/輸出 End 判斷

  7. 1-2 演算法與資料結構 • 流程圖範例 • 輸入 A, B • R 為 A / B 的餘數 • 如果 R 為零, 則到 (5) • 設定 A←B, B← R, 回到 (2) • B 就是最大公因數 start (1) 輸入 A, B (2) R 為 A/B 的餘數 (3) R是否為0 ? Yes 輸入/輸出 start No (4) A←B, B← R 處理 處理 End (5) 輸出最大公因數B 判斷 End

  8. 1-2 演算法與資料結構 • 範例: 求出兩個分數的相加,結果並要約成最簡分數 • 基本觀念(1) 通分: 公分母 (最小公倍數) = 兩數相乘 / 最大公因數(2) 擴分: 分子 * (公分母 / 分母)(3) 約分: 分子, 分母共除最大公因數5 3 5*(12/6) 3*(12/4) 5*2 + 3*3 19- + - = -------- + -------- = ---------- = ---- 6 4 12 12 12 12 • 演算法

  9. 1-3 程式的分析 • 一個好程式的判斷準則 • 正確達到目的。 計算結果要符合原先設計的要求,結果要正確 • 可維護性高。 程式功能的新增與修改要容易 • 效率高計算時間要盡量短 • 『記憶體』需求低。所使用的記憶體要盡量的少

  10. 1-3 程式的分析 • 可維護性高的檢驗方式 • 設計模組化、由上而下的思路。 • 常數、變數、函式的名稱需要有意義如: 求兩人薪資的總和,可以使用(1) A = 20000, B = 15000; ← 比較不容易了解(2) Salary_A = 20000, Salary_B = 15000; ← 比較容易了解 • 函式的輸入、出的定義int sqn_srch(int A[], int n, int key); // Sequential Search • 註解詳實Result = Result + 200; // 將結果加入200元; Result = Result / Total_Num // 除以全班人數; • 說明文件需要詳實使用說明(Readme)、安裝步驟、操作手冊

  11. 1-3 程式的分析 • 效率高的檢驗方式 • 效率的直接測量方式是『執行時間』執行時間需要考慮到許多因素,如硬體與編譯器的種類 • 由程式的本身來了解執行效率檢查程式敘述的執行『次數』來了解

  12. 1-3 程式的分析 • 由程式執行的頻率來了解效率 • 單層迴圈的計算方式for (i=1; i<=n; i++) result = result + 1; ← 這行程式敘述執行了n 次 • 雙層迴圈的計算方式for (i=1; i<=n; i++) for (j=1; j<=m; j++) result = result + 1; ← 這行程式敘述執行了 n*m次 • 雙層迴圈,內圈不固定的計算方式for (i=1; i<=n; i++) for (j=i+1; j<=n; j++) result = result + 1; ← 這行程式敘述執行了 n*(n-1)/2次以第二圈來看,執行次數分別為: n-1, n-2, …, 1= (n-1)+(n-2)+…+1 = (n-1+1)*(n-1)/2 = n*(n-1)/2

  13. 1-3 程式的分析 • Big-O (程式頻率計數) • 計算方式: 取出頻率次數的方程式中的最高次數,去掉係數 • 例如:(1) 5n2+6n+9 = O(n2)(2) 19n3+9n2+6n+9 = O(n3)(3) 3nlgn+9n+10 = O(nlgn) • 時間複雜度等級O(1), O(lgn), O(n), O(n2), O(n3), O(2n)

  14. 作業 • 第1-18與1-19頁 • 第 1, 2, 5, 7, 8, 9 題 • 和第二章的部份一起交

More Related