第 1 章 演算法分析.

Slides:



Advertisements
Similar presentations
多喝白開水, 健康水噹噹 中原食品營養師 張瑋真 前 言 小明今年九歲, 就讀中原國小, 他每天早上都會去 學校附近的早餐店, 買早餐來吃, 他通常都會吃 三明治或蛋餅, 而且都會搭配一杯奶茶或是紅茶, 才會滿足的去學校上學。 中午放學回家後, 也會在路上的便利商店, 買一罐 運動飲料或是綠茶解渴。
Advertisements

翻譯技巧解說 例文 授課教師:何資宜. 一、加譯 「おしん」の視 聴率は、最高の時が 62.9 %に達した。ク ロジロが出てくる 「南極物語」は、配 給収入が 52 億円を超 えて、記録を更新し た。 《阿信》的收視率最 高時曾達 62.9% 。此 外,以兩隻小狗太郎 次郎為主角的《南極 物語》,票房收入也.
博奥文明之旅团支部 ——师范学院小学教育专业063团支部.
思想道德修养与法律基础 ( 2013修订版) 第一章 追求远大理想 坚定崇高信念.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
两汉文学及汉代诗歌.
品德教育讀書會分組報告 第三組 組員:董健毅老師、黃琡雯老師、方永強老師、 李淑瑜老師、郭德義老師、邱美鈴老師、 陳月鈴老師、曾婷瑜老師
基本概論 Basic concepts.
近现代文学概说.
数据结构 杨鹏宇 QQ: 版权所有,转载或翻印必究
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Introduction 基本概念 授課老師:蕭志明
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
資料結構與演算法 課程教學投影片.
資料結構 第9章 搜尋.
第 九 章 搜尋(Search) 課程名稱:資料結構 授課老師:_____________.
Chapter 3 The Fundamentals : Algorithms, the Integers, and Matrices
算法设计与分析 李清勇 教授 办公室:第九教学楼北201.
计算学科的基本问题 本章首先介绍一个对问题进行抽象的典型实例——哥尼斯堡七桥问题。然后,通过“梵天塔”问题和“停机问题”分别介绍学科中的可计算问题和不可计算问题。从“梵天塔”问题再引出算法复杂性中的难解性问题、P类问题和NP类问题,证比求易算法,P=NP是否成立的问题。
请说出牛顿第一定律的内容。.
建筑工程项目管理.
数据结构 第一章 绪论.
武进区三河口中学欢迎您.
算法设计与分析 Algorithm Design and Analysis
第十一章 真理与价值 主讲人:阎华荣.
Performance Evaluation
学生培养的过程性评价.
如何查財產(2/6) EX:利息明細提醒您於金融機構有存款;營利(股利)明細提醒您有買股票。
第七章 固 定 资 产.
第8章 查找 数据结构(C++描述).
契約 課程:文書實務與應用 教師:黃湃翔老師.
行政院國軍退除役官兵輔導委員會 嘉義榮民醫院.
计算机问题求解 – 论题 算法的效率 2018年03月14日.
Course 4 搜尋 Search.
第9章 排序.
第十章 排序與搜尋.
搜尋資料結構 Search Structures.
计算复杂性和算法分析 计算机科学导论第六讲
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
4.1 一維陣列 4.2 for(:) 迴圈 4.3 動態陣列 4.4 二維陣列 4.5 非矩形陣列
计算机网络讲义 第5章 批量数据处理—数组 一维数组 排序和查找 二维数组 字符串.
第九章 查找 2018/12/9.
奢侈稅成效分析與房市未來發展 吳中書 中華經濟研究院 第十九屆亞太財務經濟會計及管理會議 ~07.09.
中国科学技术大学计算机科学与技术系 国家高性能计算中心(合肥) 2004年12月
C Programming in Action
数据结构 第八章 查找.
算法的复杂度的渐近表示方法 Big O Notation and More 吕云哲.
计算机算法设计与分析(第3版) 王晓东 编著 电子工业出版社.
作业 考核方式 书面作业:每个单元3-5个题,树、图和查找单元5-10个题。 上机作业:从第三周起每周一次 , 大约14次
公立學校教職員退休資遣撫卹條例重點說明 苗栗縣政府人事處編製 主講人:陳處長坤榮 107年5月2日.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
鄧姚文 資料結構 第五章:遞迴 鄧姚文
Week 2: 程式設計概念與 演算法的效能評估
物理實驗水火箭活動 水火箭製作.
第1章 绪论 2019/4/16.
计算机算法基础 周中成 苏州科技学院应用数学系 2019/4/18.
資料結構與演算法 第一章 基本概念 徐熊健 資料結構與演算法 徐熊健.
Hashing Michael Tsai 2013/06/04.
第1章 绪论(二) 教学目标 理解算法的特性及评价标准 掌握算法时间复杂度和空间复杂度的分析方法 1/
99高中資訊科選修課程 夥伴學習教師 專業進修研習 進階程式設計--演算法 教學示例與研討
演算法時間複雜度 (The Complexity of Algorithms)
講師:郭育倫 第2章 效能分析 講師:郭育倫
資料結構簡介 綠園.
演算法的效率分析.
演算法分析 (Analyzing Algorithms)
复杂度和测试数据 吴章昊.
Hashing Michael Tsai 2017/4/25.
遞迴 Recursion.
臺灣的障礙者權利運動 ( ) 障礙文化與心靈敘事課程.
算法的基本思想: 第6章 内部排序 6.2 气泡排序 将待排序的记录看作是竖着排列的“气泡”,关键字较小 的记录比较轻,从而要往上浮。
Presentation transcript:

第 1 章 演算法分析

目次 1.1 演算法 1.2 Big-O 1.3 動動腦時間 1.4 練習題解答

1.1 演算法 演算法(Algorithms)? 程式效率分析方式(performance analysis) 1.1 演算法 演算法(Algorithms)? 是一解決問題(problems)的有限步驟程序 產生解答中一步一步的程序 程式效率分析方式(performance analysis) 時間複雜度分析(time complexity analysis) 空間複雜度分析(space complexity analysis)

1.1 演算法(con.t) 時間複雜度分析步驟 Ex:四個範例 求出程式中每一敘述的執行次數( ‘{‘ 和 ’}’ 不計算) 再將這些執行次數加總 求出程式之Big-O,即為該程式之時間複雜度 Ex:四個範例

1.1.1 陣列元素相加 執 行 次 數 int sum(int arr[], int n) { int i, total=0; 1 1.1.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+2

1.1.2 矩陣相加 執 行 次 數 void add (int a[][], int b[][], int c[][], int m, 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

1.1.3 矩陣相乘 執 行 次 數 void mul(int a[][], int b[][], int c[][], int n) { 1.1.3 矩陣相乘 執 行 次 數 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

1.1.4 循序搜尋 執 行 次 數 int search(int data[],int target, int n) { int i; 1 1.1.4 循序搜尋    執 行 次 數 int search(int data[],int target, int n) {   int i;  1 for (i = 0; i < n; i++) n+1 if (target == data[i]) n return i; 1 } 2n+3

1.2 Big-O 程式或演算法執行時間的計算 Big-O定義 ∑ (每一敘述的執行次數 * 執行該敘述所需的時間) 通常只考慮執行的次數 Big-O定義 f(n)=O(g(n)),若且唯若存在一正整數c及n0,使得f(n)≦cg(n),對所有的n,n≧n0 此時,f(n)的Big-O為g(n)

1.2 Big-O (con.t) Big-O範例 由上述範例可知,Big-O只要取其多項式最高次方的項目即可 3n+2=O(n) ∵當c=4,n0=2,3n+2 ≦4n ∴ 3n+2 的 Big-O 為 n l0n2+5n+1=O(n2) ∵當c=11,n0=6,10n2+5n+1 ≦11n2 ∴ l0n2+5n+1 的 Big-O 為 n2 由上述範例可知,Big-O只要取其多項式最高次方的項目即可

1.2 Big-O (con.t) 常見的Big-O類型 O(1) 稱為常數時間 (constant) ← 效率最好,執行時間最少 O(log n) 稱為對數時間 (logarithmic) O(n) 稱為線性時間 (linear) O(n log n) 稱為對數線性時間 (log linear) O(n2) 稱為平方時間 (quadratic) O(n3) 稱為立方時間 (cubic) O(2n) 稱為指數時間 (exponential) O(n!) 稱為階層時間 (factorial) O(nn) 稱為n的n次方時間 ← 效率最差,執行時間最長

1.2 Big-O (con.t)  的定義 f(n) = (g(n)),若且唯若,存在正整數c和n0,使得f(n)≧cg(n),對所有的 n,n≧n0 範例 3n+2=(n) ∵當c=3,n0=1,3n+2≧3n ∴ 3n+2 的  為 n

1.2 Big-O (con.t)  的定義 f(n)=  (g(n)),若且唯若,存在正整數c1,c2及n,使得c1*g(n)≦f(n)≦c2*g(n),對所有的n,n≧n0 範例 3n+1= (n) ∵當 c1=3,c2=4,且n0=2,3n≦ 3n+1 ≦4n ∴ 3n+1 的  為 n

1.2 Big-O (con.t) Big-O, ,  的表示情形 3log(n)+8 5n+7 6n2+9 2nlog(n) 5n2+2n 4n2 4n2 4n3+ 3n2 6n2+9 6n6+ n4 5n2+2n 2n+4n 3log(n)+8 5n+7 2nlog(n) 4n2 6n2+9 5n2+2n 4n3+ 3n2 2n+4n (a) O(n2) (b)  (n2) (c)  (n2),只有中間交集部份

1.2 Big-O (con.t) 範例 循序搜尋(Sequential search) 二元搜尋(Binary search) 費氏數列(Fibonacci number)

1.2 Big-O (con.t) 循序搜尋(三種情形) Big-O為O(n) 最好的情形:搜尋的資料在第一筆,因此只要1次便可搜尋到 平均情形: (k*(1/n)) = (1/n) * k = (1/n)(1+2+…+n) = 1/n*(n(n+1)/2)= (n+1)/2 Big-O為O(n)

1.2 Big-O (con.t) 二元搜尋 Big-O為O(log2n+1) 因此可知二元搜尋法比循序搜尋法好 二元搜尋法乃是資料已經排序好,因此由中間的資料(mid)開始比較,便可知道欲搜尋的鍵值(key)是落在mid的左邊還是右邊,知道之後再將其中間的資料拿出來與鍵值相比,而每次所要調整的只是每個段落的起始位址或是最終位址 Big-O為O(log2n+1) 因此可知二元搜尋法比循序搜尋法好

1.2 Big-O (con.t) 費氏數列定義 因此 f0 = 0 f1 = 1 fn = fn-1 + fn-2 for n  2 f3 = f2 + f1 = 1 + 1 = 2 f4 = f3 + f2 = 2 + 1 = 3 f5 = f4 + f3 = 3 + 2 = 5 . fn = fn-1 + fn-2 Big-O為O(n)