資料結構簡介 2009.04 綠園.

Slides:



Advertisements
Similar presentations
電腦與問題解決 5-1 電腦解題概論 5-2 電腦解題程序 5-3 演算法概論.
Advertisements

Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
基本概論 Basic concepts.
数据结构 杨鹏宇 QQ: 版权所有,转载或翻印必究
一分鐘掌握7大護心秘訣 這是你不可忽視的心數字… 在台灣,女性死於心臟性疾病的總數, 是乳癌加子宮頸癌的4倍! 每2秒,有一人死於心血管疾病
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Introduction 基本概念 授課老師:蕭志明
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
算法设计与分析 李清勇 教授 办公室:第九教学楼北201.
请说出牛顿第一定律的内容。.
数据结构 第一章 绪论.
武进区三河口中学欢迎您.
数据结构(C语言版) Data Structure
第十一章 真理与价值 主讲人:阎华荣.
今日4版 国内统一刊号:CN01-009第5期 (代号7-2)
Performance Evaluation
Recurrences 給定T(n)=T(n/2) + O(n) 我們該如何得到 T(n) = O(nlogn)?
计算机硕士专业基础—C语言 赵海英
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
数据结构与算法 数据结构与算法实验
计算机导论 ——软件部分 巢爱棠 办公室:1208.
行政院國軍退除役官兵輔導委員會 嘉義榮民醫院.
计算机问题求解 – 论题 算法的效率 2018年03月14日.
程式設計 博碩文化出版發行.
1-1 電腦的起源 1-2 電腦的演進 1-3 電腦的種類 1-4 電腦與生活
4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear)
第 1 章 演算法分析.
计算复杂性和算法分析 计算机科学导论第六讲
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
程序设计期末复习 黎金宁
程式撰寫流程.
计算机网络讲义 第5章 批量数据处理—数组 一维数组 排序和查找 二维数组 字符串.
CHAP13 演算法概論 高中資訊科技概論 松崗圖書公司.
1.1 数据结构讨论的范畴 1.2 基本概念 1.3 算法和算法的量度.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
樹 2 Michael Tsai 2013/3/26.
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
计算机算法设计与分析(第3版) 王晓东 编著 电子工业出版社.
Chapter 01 Introduction 第一章 绪论
一分鐘掌握7大護心秘訣 這是你不可忽視的心數字… 在台灣,女性死於心臟性疾病的總數, 是乳癌加子宮頸癌的4倍! 每2秒,有一人死於心血管疾病
鄧姚文 資料結構 第一章:基本概念 鄧姚文
Week 2: 程式設計概念與 演算法的效能評估
OOP6 結構Struct 黃兆武.
第1章 绪论 2019/4/16.
计算机算法基础 周中成 苏州科技学院应用数学系 2019/4/18.
資料結構與演算法 第一章 基本概念 徐熊健 資料結構與演算法 徐熊健.
本节内容 字节对齐.
保留字與識別字.
第1章 绪论(二) 教学目标 理解算法的特性及评价标准 掌握算法时间复杂度和空间复杂度的分析方法 1/
演算法時間複雜度 (The Complexity of Algorithms)
講師:郭育倫 第2章 效能分析 講師:郭育倫
C语言程序设计 李祥 QQ:
演算法的效率分析.
演算法分析 (Analyzing Algorithms)
第二章 类型、对象、运算符和表达式.
本节内容 引用类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第九章 物件導向-進階.
2.1 合情推理与演绎推理  2.1.1 合情推理.
复杂度和测试数据 吴章昊.
本节内容 指针数组与数组指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 结构体数组.
Open topic2: 大O( Θ ,Ω)和小o( θ ,ω)有什么区别? 3/19/18 黄秉焜
遞迴 Recursion.
本章主題 C++的程式結構 資料型態與宣告 算術運算 簡易的輸入輸出指令 程式編譯(Compile)的過程與原理.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
本节内容 结构体数组 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
一分鐘掌握7大護心秘訣 這是你不可忽視的心數字… 在台灣,女性死於心臟性疾病的總數, 是乳癌加子宮頸癌的4倍! 每2秒,有一人死於心血管疾病
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
本节内容 结构体数组 视频提供:昆山爱达人信息技术有限公司.
13-1 電腦可以協助解決哪些問題 13-2 電腦解題簡介 13-3 電腦解題規劃-演算法 13-4 認識資料結構
Presentation transcript:

資料結構簡介 2009.04 綠園

資料與資訊 資料: 指一種未經處理的原始文字、數字、符號 或圖形。 資訊: 指一種未經處理的原始文字、數字、符號 或圖形。 資訊: 當資料經過特定的方式有系統的整理、歸  納甚至進行分析後,就成為「資訊」。而 這處理過程就稱為「資料處理」。

資料與資訊 整理 + 分析 (演算法 + 資料結構) 電 腦 化 資料 資訊 【處理過程】

演算法與資料結構 資料結構與演算法是程式設計中最基本的內涵。 程式能否快速而有效率的完成預定的任務,取決於是否選對了資料結構。 程式是否能清楚而正確的把問題解決,則取決於演算法。 資料結構 + 演算法 = 可執行的程式

演算法(Algorithm)的條件 輸入(Input):0個或多個輸入資料,這些輸入必須有清楚的描述或定義。 輸出(Output):至少會有一個輸出結果,不可以沒有輸出結果。 明確性(Definiteness):每一個指令或步驟必須是簡潔明確而不含糊的。 有限性(Finiteness):在有限步驟後一定會結束,不會產生無窮迴路。 有效性(Effectiveness):步驟清楚且可行,能讓使用者用紙筆計算而求出答案。

演算法效能分析 一個演算法效能的評估,經常是從時間與空間兩種因素來考量。 時間方面是指程式的執行時間,稱為「時間複雜度」。 空間方面則是指程式在電腦記憶體所佔的空間大小,稱為「空間複雜度」。 由於電腦硬體進展的日新月異及所使用電腦的不同,一般以演算法的執行時間為主要評估與分析的依據。

時間複雜度 O Big-oh:f(n)=O(g(n)) (讀作 Big-oh of g(n) 或 order is g(n)) 某演算法在電腦中所需執行時間 f(n) 不超過某一常數倍的 g(n) ,稱 f(n) 的時間複雜度為 O(g(n)) 。 意謂存在兩個常數 c 與 n0 , 對所有n ≥ n0, f(n) ≤ cg(n) 均成立。

時間複雜度範例一 【陣列元素相加】 執行次數 int sum(int arr[], int n) { int i, total=0; 1    執行次數 int sum(int arr[], int n) { int i, total=0; 1 for (i=0; i<n; i++) n+1 total += arr[i]; n return total; 1 } ____________________________________________ 2n+3   則 f(n)=2n+3,存在c=5,n0=1,    2n+3 ≤ 5n,因此 f(n)=O(n) 。

時間複雜度 O 就執行時間而言, O(1)為常數,O(n)為線性時間, O(n2)為二次函數,O(n3)為三次函數, O(2n)為指數, 這些漸近式為時間複雜度提供了一個度量的標準,我們可以証明: O(1)<O(㏒n)<O(n)<O(n㏒n)<O(n2)<O(n3)<O(2n)

時間複雜度 Ω big-omega Ω : f(n) = Ω(g(n)) 如果說Big-oh是執行時間量度的最壞情況, 那 Ω 就是執行時間量度的最好情況。 意謂存在兩個常數 c 與 n0 , 對所有n ≥ n0, f(n) ≥ cg(n) 均成立, 則稱 f(n) = Ω(g(n))。

時間複雜度 Θ big-theta Θ : f(n) = Θ(g(n)) 意是存在常數 c1、c2 與 n0 , 對所有的n ≥ n0 時, c1g(n) ≤ f(n) ≤ c2g(n) 均成立, 則稱 f(n) = Θ(g(n))。

時間複雜度範例一 【陣列元素相加】 執行次數 int sum(int arr[], int n) { int i, total=0; 1    執行次數 int sum(int arr[], int n) { int i, total=0; 1 for (i=0; i<n; i++) n+1 total += arr[i]; n return total; 1 } ____________________________________________ 2n+3

時間複雜度範例二 【矩陣相加】 執行次數 void add (int a[][], int b[][], int c[][], int n)      執行次數 void add (int a[][], int b[][], int c[][], int n) { for (int i=0; i < n; i++)     n+1 for (int j=0; j < n; j++)   n(n+1) c[i][j] = a[i][j] + b[i][j]   n2 } ____________________________________________      2n2+2n+1   則 f(n)= 2n2+2n+1 ,存在c=5,n0=1,    2n2+2n+1 ≤ 5n2,因此 f(n)=O(n2) 。

時間複雜度範例三 【矩陣相乘】 執行次數 void mul(int a[][], int b[][], int c[][], int n)      執行次數 void mul(int a[][], int b[][], int c[][], int n) { int i, j, k, sum; 1 for (i = 0; i < n; i++) n+1 for (j = 0; j < n; j++ ){ n(n+1) sum = 0; n2 for ( k = 0; k < n; k++ ) n2(n+1) sum = sum + a[i][k] * b[k][j]; n3 c[i][j] = sum; n2 } _________________________________________________      2n3+4n2+2n+2

資料結構 (Data Structure) 一個好的程式除了必須使用良好的演算法之外,也需要使用適當的資料結構來組織資料,才能節省資料的儲存空間,並提昇資料處理的速度。 資料結構是用來組織及管理資料的結構設計。 資料結構主要是在定義資料的放置方法及存取規則。

資料結構 (Data Structure) 續一 將資料作有系統的安排與組織,使資料建立成為一種便於取用與處理的結構,稱為資料結構。 資料依儲存層次上的不同可分為三種: 基本型資料型態(Atomic Data Type): 字元(char)、整數(int)、實數(float)、布林(bool) 結構型資料型態(Sturcture Data Type): 字串(string)、陣列(array)、結構(struct) 抽象型資料型態(Abstract Data Type): 類別(class)、堆疊(stack)、佇列(queue)

資料結構 (Data Structure) 續二 典型的資料結構如下: 資料表格(Table) 堆疊(stack) 佇列(queue) 串列(list) 樹(tree) 圖形(graph) table, stack, queue:可用陣列表現出來。 list, tree, graph:適合用指標表現出來。