資料結構 第1章 導論.

Slides:



Advertisements
Similar presentations
While 迴圈 - 不知重複執行次數
Advertisements

第一單元 建立java 程式.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
基本概論 Basic concepts.
Introduction to C Programming
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Introduction 基本概念 授課老師:蕭志明
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
请说出牛顿第一定律的内容。.
数据结构 第一章 绪论.
数据结构(C语言版) Data Structure
算法设计与分析 Algorithm Design and Analysis
请将手机调整到静音状态 实验网站:program3.ccshu.net 资源网站:class.ccshu.org/ /
TQC+ 物件導向程式認證-JAVA.
Performance Evaluation
The discipline of algorithms
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
Chapter 5 遞迴 資料結構導論 - C語言實作.
主題五 CPU Learning Lab.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
Linked List Operations
第一章 C语言概述.
遞迴演算法.
If … else 選擇結構 P27.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
计算复杂性和算法分析 计算机科学导论第六讲
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
Function.
程式撰寫流程.
資料結構與演算 第一章 基本概念.
(Circular Linked Lists)
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
Introduction.
CHAP13 演算法概論 高中資訊科技概論 松崗圖書公司.
C语言 程序设计基础与试验 刘新国、2012年秋.
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
電腦解題─流程圖簡介 臺北市立大同高中 蔡志敏老師.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
1.3 在整除性問題之應用 附加例題 3 © 文達出版 (香港 )有限公司.
Chap3 Linked List 鏈結串列.
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
Growth of Functions 我們要如何知道一個演算法的優劣? 要如何分辨兩個演算法何者較佳?
计算机算法设计与分析(第3版) 王晓东 编著 电子工业出版社.
第一單元 建立java 程式.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
鄧姚文 資料結構 第一章:基本概念 鄧姚文
Week 2: 程式設計概念與 演算法的效能評估
Chapter 2 遞迴 (Recursion).
資料結構與演算法 第一章 基本概念 徐熊健 資料結構與演算法 徐熊健.
数 据 结 构 与 算 法.
演算法時間複雜度 (The Complexity of Algorithms)
講師:郭育倫 第2章 效能分析 講師:郭育倫
資料結構簡介 綠園.
演算法的效率分析.
演算法分析 (Analyzing Algorithms)
陣列與結構.
挑戰C++程式語言 ──第9章 函數.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
遞迴 Recursion.
MultiThread Introduction
第6章 详细设计 Detailed Design
適用於多選一 可減少if 與 else配對混淆的錯誤.
Programming & Language Telling the computer what to do
All Sources Shortest Path The Floyd-Warshall Algorithm
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

資料結構 第1章 導論

1-1 認識資料結構 資料結構指的是資料在記憶體空間的儲存方式及存取方式,演算法指的是處理資料的流程,而程式 = 資料結構 + 演算法 。

範例1.1:[找出最大數] main() { int largest = 0; if (25 > largest) largest = 25; if (30 > largest) largest = 30; if (18 > largest) largest = 18; if (7 > largest) largest = 7; if (10 > largest) largest = 10; printf("最大數為%d", largest); }

範例1.2:[找出最大數] 01:main() 02:{ 03: int i; 04: int list[5] = {25, 30, 18, 7, 10}; 05: int largest = 0; 06: for(i = 0; i < 5; i++) 07: if (list[i] > largest) largest = list[i]; 08: printf("最大數為%d", largest); 09:}

1-2 認識演算法 演算法必須符合下列五個條件: 輸入 (input) 輸出 (output) 明確性 (definiteness) 1-2 認識演算法 演算法必須符合下列五個條件: 輸入 (input) 輸出 (output) 明確性 (definiteness) 有效性 (effectiveness) 有限性 (finiteness)

1-2-1 構思演算法 階段一 階段二 階段三 階段四 嘗試錯誤法 (try and error) 反推法 (backward) 1-2-1 構思演算法 階段一 階段二 嘗試錯誤法 (try and error) 反推法 (backward) 逐步細分法 (stepwise refinement) 類推法 階段三 階段四

範例1.3:使用 [類推法] 構思 [n個正整數中的最大數] 演算法。

2.

3.

4.

5. int find_largest(int list[], int n) { int i; int largest = 0; for(i = 0; i < n; i++) if (list[i] > largest) largest = list[i]; return(largest); }

1-2-2 演算法的結構 序列 (sequence) 決策 (decision) 重覆 (repetition)

1-2-3 演算法的表示方式 流程圖

虛擬碼 instruction 1 instruction 2 … instruction n if (condition) then one set of instructions else another set of instructions while (condition) one set of instructions end while

1-2-4 反覆與遞迴 範例1.7:[(n階層)] 使用反覆的方式計算n!,其公式如下: 1-2-4 反覆與遞迴 範例1.7:[(n階層)] 使用反覆的方式計算n!,其公式如下: 當n = 0時,f(n) = n! = 0! = 1 當n > 0時,f(n) = n! = n x (n - 1) x … x 3 x 2 x 1 int factorial(int n) { int result = 1; if (n == 0) return 1; while(n > 0){ result = result * n; n = n - 1; } return result;

範例1.8:[ (n階層)] 使用遞迴的方式計算n!,其公式如下: 當n = 0時,f(n) = n! = 0! = 1 當n > 0時,f(n) = n! = n x f(n - 1) int factorial(int n) { if (n == 0) return 1; else return (n * factorial(n - 1)); }

1-3 抽象資料型別 (ADT) 抽象資料型別 (ADT,abstract data type) 指的是將物件的規格及其相關運算的規格,與物件的表示方式及其相關運算的實作方式分隔開來,以提供更便利的形式讓使用者存取資料,而不涉及資料的實際儲存細節或實作細節。

範例1.11:設計一個 [抽象資料型別Positive_Integer],這是正整數及其相關運算的集合。 ADT: Positive_Integer Objects: Integers between 1 to the maximum integer on the computer Functions: for all x, y belongs Positive_Integer, and where +, -, *, / are the usual integer operations Positive_Integer Add(x, y) → if ((x + y) <= INT_MAX) return x + y else return INT_MAX Positive_Integer Subtract(x, y) → if ((x - y) <= 0) return 0 else return x - y Positive_Integer Increase(x) → if ((x + 1) <= INT_MAX) return x + 1 else return INT_MAX Positive_Integer Decrease(x) → if ((x - 1) <= 0) return 0 else return x - 1 End Positive_Integer

1-4 程式的效能分析 空間複雜度 (space complexity) 時間複雜度 (time complexity)

1-4-1 空間複雜度 固定記憶體空間 (fixed space) 變動記憶體空間 (variable space) 1-4-1 空間複雜度 固定記憶體空間 (fixed space) 變動記憶體空間 (variable space) 範例1.12:[兩個整數的總和] 分析下列程式的空間複雜度為何? int add(int a, int b) { return (a + b); }

範例1.13:[n個整數的總和] 分析下列程式的空間複雜度為何? int sum(int list[], int n) { int i; int result = 0; for(i = 0; i < n; i++) result = result + list[i]; return result; }

1-4-2 時間複雜度 時間複雜度 (time complexity) 指的是程式執行完畢所需的時間,為編譯時間 (compile time) 與執行時間 (execution time) 的總和。

範例1.15:[n個整數的總和] 分析範例1.13的時間複雜度為何? 敘述 s/e 頻率 程式步驟個數 int sum(int list[], int n) { int i; int result = 0; 1 for(i = 0; i < n; i++) n + 1 result = result + list[i]; n return result; } 總計 2n + 3 表1.2分析範例1.13的程式步驟個數

範例1.16:[n個整數的總和] 分析範例1.14的時間複雜度為何? 敘述 s/e 頻率 程式步驟個數 int sum(int list[], int n) { if (n) 1 n + 1 return (sum(list, n - 1) + list[n - 1]); n return 0; } 總計 2n + 2 表1.3分析範例1.14的程式步驟個數

1-4-3 漸進符號 (O、Ω、Θ) 理論上限O()(唸做“Big-Oh”):f(n) = O(g(n)) 若且為若存在正的常數c和n0,對所有n, n ≥ n0時,f(n) ≤ cg(n) 均成立,例如f(n) = 2n + 3 = O(n),f(n) = 5n2 + 2n = O(n2) 。 理論下限Ω()(唸做“Omega”):f(n) = Ω(g(n)) 若且為若存在正的常數c和n0,對所有n, n ≥ n0時,f(n) ≥ cg(n) 均成立,例如f(n) = 2n + 3 = Ω(n),f(n) = 5n2 + 2n = Ω(n2) 。 理論上下限Θ()(唸做“Theta”):f(n) = Θ(g(n)) 若且為若存在正的常數c1、c2和n0,對所有n, n ≥ n0時,c1g(n) ≤ f(n) ≤ c2g(n) 均成立,例如f(n) = 2n + 3 = Θ(n),f(n) = 5n2 + 2n = Θ(n2) 。

範例1.19:證明當f(n) = amnm + … + a1n + a0時,f(n) = O(nm)。

範例1.20:分析3 * 2n + n2 + n的O() 為何? 解答: f(n) = 3 * 2n + n2 + n = O(2n),因為存在正的常數c = 4和n0 = 5,對所有n, n ≥ 5時,f(n) ≤ 4 * 2n均成立。

範例1.25:分析下列程式的O() 為何? for(i = 0; i < n; i++) x++; 範例1.26:分析下列程式的O() 為何? for(i = n; i > 0; i = i / 2) x++; 範例1.27:分析下列程式的O() 為何? for(i = 0; i < n; i++) for(j = 0; j < n; j++) x++;