分而治之法 5 2019/8/20 演算法 _ 第五章.

Slides:



Advertisements
Similar presentations
不定積分 不定積分的概念 不定積分的定義 16 不定積分的概念 16.1 不定積分的概念 以下是一些常用的積分公式。
Advertisements

大綱 1. 三角函數的導函數. 2. 反三角函數的導函數. 3. 對數函數的導函數. 4. 指數函數的導函數.
提升教學品質研討會 工學院教師教學經驗分享 長庚大學 資訊工程學系 / 醫療機電工程研究所 助理教授 趙一平 2015/04/10.
有教無類 因材施教 適性揚才 多元進路 優質銜接
优化备课和讲课 的思考 黄恕伯
報告書名:父母會傷人 班級:二技幼四甲 姓名:吳婉如 學號:1A2I0034 指導老師:高家斌
媽,我們真的不一樣 青少年期與中年期 老師: 趙品淳老師 組員: 胡珮玟4A1I0006 馬菀謙4A1I0040
圓的一般式 內容說明: 由圓的標準式展出圓的一般式.
中二數學 第五章 : 二元一次方程 二元一次方程的圖像.
圓的一般式 內容說明: 由圓的標準式展出圓的一般式.
分治演算法 與 刪尋演算法 各個擊破與化整為零.
遞迴關係-爬樓梯.
班級:二幼三甲 姓名:郭小瑄 、 詹淑評 學號:1A2I0029 、1A2I0025
美学概论 主讲教师 孙建章 沈阳电大文法系.
第5章 排序与查找 PART A 《可视化计算》.
指導老師:陳韻如 姓名:吳宜珊 學號:4A0I0911 班級:幼保二乙
分治演算法 各個擊破獲得最後勝利 國立中央大學 資工系 江振瑞 教授.
我的社區_觀塘 第三課.
傳統童玩遊戲創新 組別:第八組 班級:幼保二甲 組員: 4A0I0005柯舒涵 4A0I0011謝孟真
第十章 内部排序 10.1 概述 10.2 插入排序 直接插入排序 其他插入排序 希尔排序
課程名稱:資料結構 授課老師:_____________
分治演算法 各個擊破獲得最後勝利 國立中央大學 資工系 江振瑞 教授.
主讲人: 吕敏 { } Spring 2012 ,USTC 算法基础 主讲人: 吕敏 { } Spring 2012 ,USTC.
第九章 排序 概述 插入排序 交换排序 选择排序 归并排序 基数排序 外排序.
2-3 基本數位邏輯處理※.
排序 Sorting.
快速排序法 (Quick Sort).
第9章 排序.
1、基本概念 2、插入排序 3、交换排序 4、选择排序 5、归并排序 6、基数排序 7、外部排序
(Circular Linked Lists)
Wavelet transform 指導教授:鄭仁亮 學生:曹雅婷.
1.3 在整除性問題之應用 附加例題 3 © 文達出版 (香港 )有限公司.
Sorting 排序 Bubble Sort O(n2) Insert Sort Selection Sort Quick Sort
Chap3 Linked List 鏈結串列.
数据结构 Data Structure CSU 主讲人:王国军,郑瑾 中南大学信息院计科系
第九章 查找 2019/2/16.
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
Lecture 6 Quicksort 本章的重點在介紹Quicksort的作法 然後給予時間複雜度的分析。
计算机算法基础 周中成 苏州科技学院应用数学系 2019/4/18.
Definition of Trace Function
第九章 排序 概述 插入排序 快速排序 交换排序(起泡排序) 选择排序 归并排序.
分而治之法 /4/27 演算法 _ 第五章.
大綱:加減法的化簡 乘除法的化簡 去括號法則 蘇奕君 台灣數位學習科技股份有限公司
蕭志明 老師 Algorithm(演算法) Ext:6779
蕭志明 老師 Algorithm(演算法) /FB:
Ogive plot example 說明者:吳東陽 2003/10/10.
算法导论第一次习题课.
資料結構與C++程式設計進階 遞迴(Recursion) 講師:林業峻 CSIE, NTU 6/ 17, 2010.
完全二分圖的Pt-因子分解的探討 指導教授:高金美 學生:陳昆楠.
淘汰與搜尋法 /5/9 演算法 _ 第四章.
12797: Letters ★★★☆☆ 題組:Problem Set Archive with Online Judge
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
Commando War ★★☆☆☆ 題組:Problem Set Archive with Online Judge
例題 1. 多項式的排列 1-2 多項式及其加減法 將多項式 按下列方式排列: (1) 降冪排列:______________________ (2) 升冪排列:______________________ 排列 降冪:次數由高至低 升冪;次數由低至高.
1-1 二元一次式運算.
Chapter 9 慣性矩 9-1 面積慣性矩 9-2 平行軸原理 9-3 組合面積之慣性矩 9-4 迴轉半徑 9-5 質量慣性矩
1757: Secret Chamber at Mount Rushmore
1-4 和角公式與差角公式 差角公式與和角公式 1 倍角公式 2 半角公式 和角公式與差角公式 page.1/23.
資料結構 老師:李崇明 助教:楊斯竣.
在直角坐標平面上兩點之間 的距離及平面圖形的面積
資料結構 老師:李崇明 助教:楊斯竣.
Quicksort 本章的重點在介紹Quicksort的作法 然後給予時間複雜度的分析。.
Test for R Data Processing & Graphics
All Sources Shortest Path The Floyd-Warshall Algorithm
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
Advanced Competitive Programming
單元三:敘述統計 內容: * 統計量的計算 * 直方圖的繪製.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
第一章 直角坐標系 1-2 距離公式、分點坐標.
Presentation transcript:

分而治之法 5 2019/8/20 演算法 _ 第五章

什麼叫分而治之法 針對一個有 n 筆輸入的問題,它把輸入分解成 k(1 < k  n)個獨立的小集合 這導致原問題變成k個小問題 2019/8/20 演算法 _ 第五章

什麼叫分而治之法 分而治之法分因此可以分成三個主要步驟: 如果要處理的資料量已經夠少,那麼用直接的方式解決;否則,把輸入資料分解成兩個獨立的小集合 求出每一個小問題的解,並且 把這兩個小問題的解組合起來,成為原來的大問題的解 2019/8/20 演算法 _ 第五章

什麼叫分而治之法 一個分而治之演算法的時間複雜度 T(n) 可以用下列的遞迴關係來求得: 其中 S(n) 是將原問題分解成兩個小問題所需要花的時間,M(n) 是將兩個小問題的解組合成原問題的解所需要花的時間,b 跟 c 都是常數 2019/8/20 演算法 _ 第五章

合併排序法 2019/8/20 演算法 _ 第五章

合併排序法 2019/8/20 演算法 _ 第五章

合併排序法 22 5 79 1 63 13 56 17 43 20 Merge_Sort(1, 10) 22 5 79 1 63 Merge_Sort(1, 5) 22 5 79 Merge_Sort(1, 3) 22 5 Merge_Sort(1, 2) Merge_Sort(1, 1) ; return 22 2019/8/20 演算法 _ 第五章

合併排序法 22 5 79 1 63 13 56 17 43 20 22 Merge_Sort(low, mid) = Merge_Sort(1, 1) // low =1, mid = 1, high =2 Merge_Sort(mid+1, high) = Merge_Sort(2, 2); return 5 5 22 Merge(1, 1, 2) 2019/8/20 演算法 _ 第五章

合併排序法 22 5 79 1 63 13 56 17 43 20 22 Merge_Sort(low, mid) = Merge_Sort(1, 1) // low =1, mid = 1, high =2 5 Merge_Sort(mid+1, high) = Merge_Sort(2, 2) 5 22 Merge(1, 1, 2); return // low =1, mid =2, high =3 79 Merge_Sort(mid+1, high) = Merge_Sort(3, 3) Merge(1, 2, 3); return // low =1, mid =2, high =3 5 22 79 演算法 _ 第五章 2019/8/20

合併排序法 演算法 5.1 的 S(n) 是常數時間 O(1),因為它的分割只需要計算 mid 演算法 5.1 的 M(n) 做的是合併的工作,所需要的計算時間跟 n 成正比 因此,演算法 5.1 的時間複雜度 T(n) 可以用下列的遞迴關係來描述: 2019/8/20 演算法 _ 第五章

合併排序法 如果 2k < n  2k+1,則 T(n)  T(2k+1)。因此T(n) = O(n log n) 2019/8/20 演算法 _ 第五章

合併排序法 我們在第二章證明了排序問題的最壞情況計算複雜度是 (n log n) 而合併排序法的最壞情況時間複雜度又是T(n) = O(n log n) 因此,合併排序法已經是在最壞情況下的最佳化演算法了 2019/8/20 演算法 _ 第五章

合併排序法 合併排序法的平均時間複雜度又是多少? 作業 2.18 題證明了「排序問題的平均情況計算複雜度下限也是 (n log n)」 因此,合併排序法的平均情況時間複雜度必然大於等於 O(n log n) 2019/8/20 演算法 _ 第五章

合併排序法 但是,任何一個演算法的平均情況複雜度必然小於等於它的最壞情況複雜度,合併排序法也不例外 因此,合併排序法的平均情況複雜度必然小於等於 O(n log n) 綜合以上的討論,我們因此得到合併排序法的平均情況複雜度也等於O (n log n) 這也意味著合併排序法也是平均情況下的最佳化演算法 2019/8/20 演算法 _ 第五章

快速排序法 快速排序法的最壞情況時間複雜度高達O(n2) 但是平均起來它通常都跑得比合併排序法快 快速排序法也是使用分而治之法 2019/8/20 演算法 _ 第五章

快速排序法 先從待排序的資料中選擇一筆樞鈕資料 接下來,將待排序的記錄重新排列使得 最後,樞鈕左方的記錄以及樞鈕右方的記錄分別獨立地做排序 在樞鈕左方的資料都小於或等於樞鈕 在樞鈕右方的資料則都大於或等於樞鈕 最後,樞鈕左方的記錄以及樞鈕右方的記錄分別獨立地做排序 2019/8/20 演算法 _ 第五章

快速排序法 2019/8/20 演算法 _ 第五章

快速排序法 2019/8/20 演算法 _ 第五章

Procedure Quicksort(A, l, r) If l < r then s = Partition(A, l, r) Quick Sort, Introduction to the Design & Analysis of Algorisms By A. Levitin Procedure Quicksort(A, l, r) If l < r then s = Partition(A, l, r) Quicksort(A, l, s-1) Quicksort(A, s+1, r) 2019/8/20 演算法 _ 第五章

Procedure Partition(A, l, r) // Hoare Partirion pivot = A[l] i = l; Quick Sort, Introduction to the Design & Analysis of Algorisms By A. Levitin Procedure Partition(A, l, r) // Hoare Partirion pivot = A[l] i = l; j = r + 1 repeat repeat i = i + 1 while (until) A[i]  pivot repeat j = j - 1 while (until) A[j]  pivot swap(A[i], A[j]) until i  j swap(A[i], A[j]) // undo last swap when i  j swap(A[l], A[j]) return j 2019/8/20 演算法 _ 第五章

Quick Sort, Introduction to the Design & Analysis of Algorisms By A Quick Sort, Introduction to the Design & Analysis of Algorisms By A. Levitin Pivot = A[i] i, left right j 2 8 7 1 3 5 6 4 Pivot = 2 left i right j A[i]  2 2 8 7 1 3 5 6 4 Pivot = 2 left i right j A[i]  2 2 8 7 1 3 5 6 4 2019/8/20 演算法 _ 第五章

Quick Sort, Introduction to the Design & Analysis of Algorisms By A Quick Sort, Introduction to the Design & Analysis of Algorisms By A. Levitin Pivot = 2 left i right j A[i]  2 2 8 7 1 3 5 6 4 Pivot = 2 left i j, right A[j]  2 2 8 7 1 3 5 6 4 Swap(A[i], A[j]) Pivot = 2 left i j, right 2 8 7 4 3 5 6 1 2019/8/20 演算法 _ 第五章

Quick Sort, Introduction to the Design & Analysis of Algorisms By A Quick Sort, Introduction to the Design & Analysis of Algorisms By A. Levitin Pivot = 2 left i j, right A[i]  2 2 8 7 4 3 5 6 1 Pivot = 2 left i j, right A[i]  2 2 8 7 4 3 5 6 1 Pivot = 2 left i j, right A[i]  2 2 8 7 4 3 5 6 1 2019/8/20 演算法 _ 第五章

Quick Sort, Introduction to the Design & Analysis of Algorisms By A Quick Sort, Introduction to the Design & Analysis of Algorisms By A. Levitin Pivot = 2 left i, j, right A[i]  2 2 8 7 4 3 5 6 1 Pivot = 2 left j i, right A[j]  2 2 8 7 4 3 5 6 1 Swap(A[i], A[j]) Pivot = 2 left j i, right 2 8 7 4 3 5 1 6 2019/8/20 演算法 _ 第五章

Swap(A[i], A[j]) // undo last exchange Quick Sort, Introduction to the Design & Analysis of Algorisms By A. Levitin Swap(A[i], A[j]) Pivot = 2 left j i, right 2 8 7 4 3 5 1 6 Swap(A[i], A[j]) // undo last exchange Pivot = 2 left j i, right 2 8 7 4 3 5 6 1 Swap(A[l], A[j]) Pivot = 2 left j i, right 6 8 7 4 3 5 2 1 2019/8/20 演算法 _ 第五章

快速排序法 W(n) = O(n2) 最佳情況時間複雜度是 O(n log n) 平均計算時間是 O(n log n) 2019/8/20 演算法 _ 第五章

快速排序法 歸納基礎:當n = 2,從 (5.1) 式得到Tavg(2) ≤ 2c + 2b ≤ kn loge2。 歸納假設:假設Tavg(n) ≤ kn loge n,其中1 ≤ n < m。 2019/8/20 演算法 _ 第五章

快速排序法 歸納步驟:從 (5.1) 式跟歸納假設中我們得到: 2019/8/20 演算法 _ 第五章

快速排序法 2019/8/20 演算法 _ 第五章

二維平面上的極點 給定平面上的兩個點 P1 = (x1, y1), P2 = (x2, y2),我們說 P1 凌駕(dominate)P2 若且唯若 x1 > x2 且 y1 >y2 如果一個點不被任何點所凌駕,則我們就稱該點為極點(maximal point) 2019/8/20 演算法 _ 第五章

二維平面上的極點 2019/8/20 演算法 _ 第五章

二維平面上的極點 2019/8/20 演算法 _ 第五章

二維平面上的極點 2019/8/20 演算法 _ 第五章

二維平面上的極點 2019/8/20 演算法 _ 第五章

二維平面上的極點 2019/8/20 演算法 _ 第五章

二維平面上的極點 2019/8/20 演算法 _ 第五章

二維平面上的極點 步驟二裡的 2.1 行找中位數需要 O(n) 的時間,2.2行的分割也需要O(n) 的時間 步驟三需要 2T(n/2) 步驟四的 4.1 行求最大值需要 O(n) 的時間,4.2 行比較 SL 極點的 y 座標值與 ymax 需要 O(n) 的時間 因此,整個演算法的時間複雜度是 T(n) = 2T(n/2) + O(n) = O(n log n) 2019/8/20 演算法 _ 第五章

最接近的兩點 2019/8/20 演算法 _ 第五章

最接近的兩點 直接解這個問題需要計算任意兩點間的距離,因此我們需要 O(n2) 的時間才能解出這個問題 我們可以利用分而治之法將複雜度降到O(n log n) 2019/8/20 演算法 _ 第五章

最接近的兩點 2019/8/20 演算法 _ 第五章

最接近的兩點 2019/8/20 演算法 _ 第五章

最接近的兩點 2019/8/20 演算法 _ 第五章

最接近的兩點 我們只需要將RL裡的每一點與RR中頂多6個點配對、檢測即可 2019/8/20 演算法 _ 第五章

最接近的兩點 2019/8/20 演算法 _ 第五章

最接近的兩點 2019/8/20 演算法 _ 第五章

最接近的兩點 2019/8/20 演算法 _ 第五章

最接近的兩點 步驟一只需要 O(1) 的時間 步驟二的兩次排序分別都需要 O(n log n) 假設步驟三至步驟五的執行時間為 T(n) 步驟五裡的p點最壞情況下有n/2個,針對每一個p點我們頂多需要檢測六個在SR裡的點,因此步驟五的最壞情況複雜度為6cn = O(n),其中c是一個常數 我們於是得到步驟三至步驟五的執行時間為 T(n) = 2T(n/2) + O(n) = O(n log n)。 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 數位傅利葉轉換(DFT)的定義為: 它的逆轉換則定義為: 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 利用wn,我們可以將傅利葉轉換重寫成 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 當 n = 4 時: 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 把偶數項放一起,奇數項放一起: 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 但是, 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 我們因此可以將上面的 4 點傅利葉轉換係數重寫成: 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 8點傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 把偶數點跟奇數點分別集中 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 我們因此可以將上面的 8 點傅利葉轉換係數重寫成: 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 n = 2k 點的傅利葉轉換 將 Aj 與 Aj+n/2 湊成一對 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 定義 Bj 與 Cj 如下: 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 2019/8/20 演算法 _ 第五章

快速傅利葉轉換 時間複雜度是 T(n) = 2T(n/2) + cn = O(n log n) 2019/8/20 演算法 _ 第五章