Lecture 4 Recurrences 給定T(n)=T(n/2) + O(n) 我們該如何得到 T(n) = O(nlogn)?

Slides:



Advertisements
Similar presentations
第四章 衛生保健及急救 組員: 4990U002 何易芳 4990U021 張書涵 4990U035 沈采柔 4990U036 王孜瑜 4990U039 許佳靜 4990U043 黃懿華 4991U002 柳瑋翎 4991U008 陳禹伶 第五組.
Advertisements

從一付卜克牌 (52 張 ) 中,任選 5 張牌,有幾種組合? 《一對》兩張相同數字的牌和三張不同數字的牌所組成 。 《兩對》有兩對兩張相同數字的牌和一張不同數字的牌所 組成。 《三條》由三張相同數字的牌和兩張不同數字的牌所組成。 《順子》連續性的五張牌所構成的牌型。含有A的五張連 續牌,A必須為首或居末位,才算是順子。
1.2 应用举例 ( 一 ). 复习引入 B C A 1. 什么是正弦定理? 复习引入 B C A 1. 什么是正弦定理? 在一个三角形中,各边和它所对 角的正弦的比相等,即.
104年 志願選填試探後輔導 彰化縣學生輔導諮商中心 適性輔導組.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
第八章 互换的运用.
Introduction to C Programming
2011年10月31日是一个令人警醒的日子,世界在10月31日迎来第70亿人口。当日凌晨,成为象征性的全球第70亿名成员之一的婴儿在菲律宾降生。 ?
初级会计实务 第八章 产品成本核算 主讲人:杨菠.
意想不到的作用 第十章 压强与浮力 一、压 强.
遞迴關係-爬樓梯.
中考阅读 复习备考交流 西安铁一中分校 向连吾.
交通事故處置 當事人責任與損害賠償 屏東縣政府警察局交通隊.
中央广播电视大学开放教育 成本会计(补修)期末复习
Recurrences 給定T(n)=T(n/2) + O(n) 我們該如何得到 T(n) = O(nlogn)?
人教版义务教育课程标准实验教科书 小学数学四年级上册第七单元《数学广角》 合理安排时间 248.
崇拜即將開始,請大家安靜片刻, 預備心靈敬拜上帝。
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
中考语文积累 永宁县教研室 步正军 2015.9.
小学数学知识讲座 应用题.
倒装句之其他句式.
Linear Programming: Introduction and Duality
Chapter 5 迴圈.
第 22 课 孙中山的民主追求 1 .近代变法救国主张的失败教训: “师夷之长技以制 夷”“中体西用”、兴办洋务、变法维新等的失败,使孙中山
音樂之旅 第一冊 單元十 曲式──二段體、三段體.
到定点的距离等于定长的所有点都在这个圆上!
第 12 章 交流電源 …………………………………………………………… 12-1 單相電源 12-2 單相三線式 ※ 12-3 三相電源.
CHT IPv6測試 D-Link Taiwan 友訊科技台灣分公司 TTSS 電信技術支援課 Name:
第八章 欧氏空间 8.1 向量的内积 8.2 正交基 8.3 正交变换 8.4 对称变换和对称矩阵.
資料結構 第1章 導論.
1.3 在整除性問題之應用 附加例題 3 © 文達出版 (香港 )有限公司.
10.2 排列 2006年4月6日.
练习: 由三个不同的英文字母和三个不同的阿拉伯数字组成一个六位号码(每位不能重复),并且3个英文字母必须合成一组出现,3个阿拉伯数字必须合成一组出现,一共有多少种方法?
Growth of Functions 我們要如何知道一個演算法的優劣? 要如何分辨兩個演算法何者較佳?
Week 2: 程式設計概念與 演算法的效能評估
Lecture 6 Quicksort 本章的重點在介紹Quicksort的作法 然後給予時間複雜度的分析。
數學 近似值 有效數值.
Introduction to C Programming
Definition of Trace Function
新高中通識教育科教案設計分享會 現代中國: 中國文化與現代生活 朱秀玲老師.
挑戰C++程式語言 ──第8章 進一步談字元與字串
如何使用Gene Ontology 網址:
講師:郭育倫 第2章 效能分析 講師:郭育倫
C qsort.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
10115: Automatic Editing ★★☆☆☆
12797: Letters ★★★☆☆ 題組:Problem Set Archive with Online Judge
Commando War ★★☆☆☆ 題組:Problem Set Archive with Online Judge
10328: Coin Toss ★★★☆☆ 題組:Problem Set Archive with Online Judge
1757: Secret Chamber at Mount Rushmore
13194: DPA Number II ★★☆☆☆ 題組:Problem Set Archive with Online Judge
( )下列何者正確? (A) 7< <8 (B) 72< <82 (C) 7< <8 (D) 72< <82 C 答 錯 對.
7.2 正弦公式 附加例題 1 附加例題 2.
程式設計--Quick Sort 通訊一甲 B 楊穎穆.
106學年度中區工作坊PART1 素養導向教學示例 -分享與實作- 分享人:周雅釧.
10.3 水平面上的方位角.
在△ABC 與△DEF 中,∠B=∠E=65°,∠A=57°,∠F=58°,請問兩個三角形是否相似?為什麼?
Quicksort 本章的重點在介紹Quicksort的作法 然後給予時間複雜度的分析。.
All Sources Shortest Path The Floyd-Warshall Algorithm
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
畢氏定理(百牛大祭)的故事 張美玲 製作 資料來源:探索數學的故事(凡異出版社).
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
12439: February 29 ★☆☆☆☆ 題組:Problem Set Archive with Online Judge
解下列各一元二次方程式: (1)(x+1)2=81 x+1=9 或 x+1=-9 x=8 或 x=-10 (2)(x-5)2+3=0
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
102年人事預算編列說明 邁向頂尖大學辦公室製作.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
CHT IPv6測試 D-Link Taiwan 友訊科技台灣分公司 TTSS 電信技術支援課 Name:
InputStreamReader Console Scanner
Presentation transcript:

Lecture 4 Recurrences 給定T(n)=T(n/2) + O(n) 我們該如何得到 T(n) = O(nlogn)? 本章的重點教導如何解上述的遞迴式。

4.1 The substitution method (ii)用歸納法證明 (for both upper and lower bounds) 猜的時候必須根據經驗, 當猜測的結果不對時,必須加以修正再重新證明一次。 Recurrences

範例: 找到 T(n) = 2T(n/2) + n 的 upper bound (T(1) = 1) 猜測 T(n) = O(nlg n) 試著證明存在著常數 c 和 n0 使得 T(n)  cn lg n 對於所有的 n  n0 都成立。 注意歸納法有兩個重要的步驟: Basis Induction Recurrences

在 n=1 時,沒有常數 c 能夠滿足 T(1)  cn lg n=0。 Basis: (n=n0) 在 n=1 時,沒有常數 c 能夠滿足 T(1)  cn lg n=0。 在 n=2 時,任何大於等於 T(n)/(n lg n) 的常數 c 都會滿足 T(n)  cn lg n。所以我們可以選擇 n0  2 且 c  T(n0)/(n0 lg n0) ………(1) Basis要說明的是當n小的時候成立 (n = n0) Recurrences

假設 T(n)  cn lg n 這個式子對於所有介在 n0 和 n-1 之間的 n 都成立。我們可以得到 Induction: (n>n0) 假設 T(n)  cn lg n 這個式子對於所有介在 n0 和 n-1 之間的 n 都成立。我們可以得到 T(n)  2(cn/2 lg n/2) + n (Substitution)  cn lg (n/2) + n = cn lg n – cn lg 2 + n = cn lg n – cn + n cn lg n, 其中最後一步在 c  1 的時候成立………(2) 根據(1)(2),我們可以選擇 n0 = 2 以及 c = max{1, T(2)/(2 lg 2)} = 2 讓 basis 及 induction 都成立。 Induction則是要證明當n > n0的情況下成立 假設我們先前的假設在n0到n之間都成立,然後證明 T(n) 也符合先前的假設。 Recurrences

Substitution Method 步驟 1. 猜測 T(n) = O(g(n))  證明存在 c 和 n0 使得 T(n)  cg(n) 對於全部的 nn0 都成立……(1) Recurrences

 如果我們已知 c 和 n0,那麼我們就可以用歸 納法證明(1) (a) Basis step: (1) 在 n = n0 時成立 (b) Induction step: (1) 在 n > n0 時成立  如何找到 c 和 n0 符合歸納法中的證明? (i) 找到符合 basis step 的 c 和 n0 的條件 (ii) 找到符合 induction step 的 c 和 n0 的條件 (iii) 綜合 (i) 和 (ii) 的條件 Recurrences

Subtleties: (修改假設:減一個低次方項) 範例: T(n) = T(n/2)+T(n/2)+1 (T(1) = 1) 猜測 T(n) = O(n) 當我們沒辦法根據先前的技巧順利得證的話,必要時得修改假設 subtleties就是修改假設的一個方法。 Recurrences

Induction: T(n) = T(n/2) + T(n/2) + 1  c(n/2 + n/2) + 1 Basis: ok! Induction: T(n) = T(n/2) + T(n/2) + 1  c(n/2 + n/2) + 1 = cn + 1 無法證明 T(n)cn !!!! 試著證明 T(n)  cn – b Induction: T(n)  (cn/2-b) + (cn/2-b) + 1 = cn – 2b + 1  cn – b, 最後一步對於任意大於等於 1 的常數 b 都成立 若無法證明 T(n) <= cn, 但是很接近了,要想想是否能證明 T(n) <= cn – b. Recurrences

Avoiding pitfalls: T(n) = 2T(n/2) + n 猜測 T(n) = O(n)。 試著證明 T(n)cn。 Induction: T(n)  2cn/2 + n  cn + n = O(n)  錯 !! 假設我們正在證明 T(n) <= cn, 對於 induction 來說,最後 T(n) 也必須要小於等於 cn 本頁中的式子只能導到 T(n) <= (c+1)n, 代表假設不成立。 Recurrences

Changing variable: T(n) = 2T( ) + lg n 為了簡單起見,假設 n=2m。變成 T(2m) = 2T(2m/2) +m 令 S(m) = T(2m),我們可以得到   S(m) = 2S(m/2) + m (把 m 換成 lg n) 因為我們知道 S(m) = O(m lg m),所以可以推得T(n) = O(lg n lglg n) 有時候遞迴式子直接分析不容易 透過變換變數,式子有可能會變得比較容易分析。 Recurrences

4.2 The iteration(recursion-tree) method 範例: T(n)=3T(n/4) + n T(n) = n + 3(n/4 + 3T(n/16)) = n + 3n/4 + 9(n/16 + 3T(n/64)) . . (note that n/( 1)  n + 3n/4 + 9n/16 + 27n/64 + ... + (1) = 4n+o(n) = O(n) 一直不斷地將遞迴式子帶入,最後就會得到一長串式子 分析該式子即可得到最後的結果。 Recurrences

Recursion trees: (for visualizing the iteration) T(n)=2T(n/2) + n2 Recurrences

n2 n2 lg n 畫成樹狀表示 然後將每一層所花的時間加起來就是全部所需要的時間。 … … Total: Recurrences

範例: T(n) = T(n/3) + T(2n/3) + n … … Total: Recurrences

4.3 The master method Theorem 4.1 (Master theorem) 令 a  1 及 b > 1 為常數,令 f(n) 為一函數,且定義 T(n) 為非負的整數,且其遞迴式為 T(n) = aT(n/b) + f(n),在此 n/b 表示 n/b 或 n/b。則依不同的情況,T(n) 的大小範圍如下: 1. 若存在常數  > 0 使得 f(n) = O(nlogb a),則 T(n) = (nlogb a) 2. 若 f(n) = (nlogb a),則 T(n) = (nlogb a lg n) 3. 若存在常數  > 0 使得 f(n) = (nlogb a+),且存在常數 c < 1 使得對所有夠大的 n,af(n/b)  cf(n),則 T(n) = (f(n))。 在某些情況下,我們不需要大費周章的分析遞迴式 本小節提供了一些公式,只要符合提到的條件,就可以用公式直接求解。 要注意的是,Master Theorem所提供的這些公式仍有不能解決的遞迴式子。 Recurrences

範例: T(n) = 9T(n/3) + n, a=9, b=3, nlogb a= n2 套用 case 1,可得 T(n)=(n2) 範例: T(n) = T(2n/3) + 1, a=1, b=3/2, nlogb a= n0 套用 case 2,可得 T(n)=(lg n) 範例: T(n) = 3T(n/4) + n, a=3, b=4, nlogb a= nlog4 3 套用 case 3,可得 T(n)=(n) T(n) = 9T(n/3) + n => a = 9, b = 3 T(n) = T(2n/3) + n => a = 1, b = 3/2 T(n) = 3T(n/4) + n => a = 3, b = 4 Recurrences

註: 這三個 case 並沒有包含所有 f(n) 的可能性。 Case 1 與 2 之間有 gap, case 2 與 3 之間也有。 範例: T(n) = 2T(n/2) + n lg n 在這個例子中,第二個 case 以及第三個 case 都不能被套用。 Recurrences

Exercises Problem 1: 在德國的樂透中你必須從 1 到 49 號之中選出六個數字。玩樂透有一個很普遍的策略(雖然不會增加你贏的機會),就是選擇一個子集合 S 包含 49 個數字裡面的 k (k>6) 個數字,然後只從 S 裡面選擇 6 個數字,重複玩很多次。 例如,k=8 且 S={1,2,3,5,8,13,21,34},總共有 28 種組合: [1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34]。 你的工作就是寫一個程式,讀入 k 以及 S,然後印出所有可能的組合。 Recurrences

Exercises 輸入:有好幾組測資。每一組測資會先給一個整數 k (6 < k < 13),接著之後的 k 個整數就是集合 S (數字由小排到大)。k=0 代表輸入結束。 輸出:對於每組測資,印出所有可能的組合(一行印一種組合)。每一種組合的數字要從小到大印出,每個數字之間要用一個空白隔開。所有的組合必須要根據字典順序印出,也就是先從最小的數字當作排序的依據,相等的時候再根據第二小的數字,依此類推。每一組測資的輸出要用一個空行隔開。不要在最後一組測資的輸出之後多印一個空行。 Recurrences

以下是一個輸出入的實例: Sample Input Sample Output 7 1 2 3 4 5 6 7 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 7 1 2 3 4 6 7 1 2 3 5 6 7 1 2 4 5 6 7 1 3 4 5 6 7 2 3 4 5 6 7 Recurrences

Exercises Problem 2: 產生排列組合在資訊科學方面一直是個重要的問題。這一題要求你把一段字串的所有排列組合依照字典順序由前到後排好。請記住你的演算法必須要有效率。 輸入:第一行包含一個整數 n, 接下來的 n 行包含了 n 個字串。字串只會由英文字母或數字所構成,而且不會有空白字元在裡頭。字串最大的長度為 10。 輸出:對於每組測資,依照先後順序把所有的排列組合印出來。字母的大小視為不同,而且要注意印出來的排列組合不能重複。在每組輸出後面要多印一個空行。 Recurrences

以下是一個輸出入的實例: Sample Input Sample Output 3 ab abc bca ab ba abc acb bac bca cab cba abc acb bac bca cab cba Recurrences