Recursion: The Mirrors

Slides:



Advertisements
Similar presentations
Chapter 5, Book 5A Longman Welcome to English Favourite festivals.
Advertisements

allow v. wrong adj. What’s wrong? midnight n. look through guess v. deal n. big deal work out 允许;准许 有毛病;错误的 哪儿不舒服? 午夜;子夜 快速查看;浏览 猜测;估计 协议;交易 重要的事.
1 FOUR SQUARE QUESTIONS! 四方塊問題 這是一個富有哲理的智力遊戲。特此翻譯為中文, 並推薦給大家。
楊學成 老師 Chapter 1 First-order Differential Equation.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
Chapter 1 人類的探究與科學 © 2010 Cengage Learning. All rights reserved.
谁动了我的CK? + BY黄建建 谢宇 CAN HEAR 锐得PPT论坛整理
周柏伶 國立台中女中輔導主任 彰師大輔導與諮商研究所碩士 諮商心理師
:sisu Password:
中国(成都)斯宝特房地产营销策划有限公司 2007年5月22日
Performance Evaluation
《优质客户的开发与维护》 第三章 信贷营销客户经理管理 魏忠 博士后、副教授
Data Abstraction: The Walls
读秀学术搜索 读秀的图书搜索. 能够为我们解决一个 什么问题? 是什么东西? 读秀 1. 读秀知识库是以 170 万种中文图书、 6 亿页 全文资料为基础的超大型数据库。 2. 为读者提供深入到图书内容章节和全文的精 度检索,全面立体的多面检索,部分文献的 原文试读,以及参考咨询服务,是一个真正.
one Counting units 2 ones 3 ones.
Chapter 5 遞迴 資料結構導論 - C語言實作.
Differential Equations (DE)
Chapter 4 歸納(Induction)與遞迴(Recursion)
簡易C++除錯技巧 長庚大學機械系
遞迴演算法.
物件導向程式設計 (Object-Oriented rogramming)
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
Course 9 NP Theory序論 An Introduction to the Theory of NP
创建型设计模式.
子博弈完美Nash均衡 我们知道,一个博弈可以有多于一个的Nash均衡。在某些情况下,我们可以按照“子博弈完美”的要求,把不符合这个要求的均衡去掉。 扩展型博弈G的一部分g叫做一个子博弈,如果g包含某个节点和它所有的后继点,并且一个G的信息集或者和g不相交,或者整个含于g。 一个Nash均衡称为子博弈完美的,如果它在每.
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
Cyclic Hanoi问题 李凯旭.
Chapter 3 Nationality Objectives:
Unit 4.
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
Customer Expectations of Service
Chapter 5 Recursion.
FOUR SQUARE QUESTIONS! 四方塊問題 這是一個富有哲理的智力遊戲。.
資料結構 Data Structures Fall 2006, 95學年第一學期 Instructor : 陳宗正.
中国科学院计算机网络信息中心 中国科技网网络中心 All rights reserved
高性能计算与天文技术联合实验室 智能与计算学部 天津大学
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
Lecture 6 Quicksort 本章的重點在介紹Quicksort的作法 然後給予時間複雜度的分析。
Guide to a successful PowerPoint design – simple is best
Chap7 Recursive.
MATLAB 程式設計入門篇 初探MATLAB
All Rights Reserved by NII產業發展協進會
可愛的鍬形蟲 五年四班2.
中央社新聞— <LTTC:台灣學生英語聽說提升 讀寫相對下降>
计算机问题求解 – 论题 算法方法 2016年11月28日.
Case study: a manager’s dilemma 組別:3-7 組員:資財 黃姿瑋 資財 林宛璇
今天, AC 你 了吗? 2019/4/21.
想想看: 長方體體積.
Course 10 削減與搜尋 Prune and Search
Distance Vector vs Link State
第 二 章 遞迴(Recursion) 課程名稱:資料結構 授課老師:________ 2019/5/5.
Chapter 10 Mobile IP TCP/IP Protocol Suite
赵才荣 同济大学,电子与信息工程学院,智信馆410室
 隐式欧拉法 /* implicit Euler method */
Multi-threaded Algorithm 3
反覆迴圈、陣列、副程式 靜宜大學資管系 楊子青
反覆迴圈、陣列、副程式 靜宜大學資管系 楊子青
2012 程式設計比賽 Openfind 天使帝國 v2.0 (蓋亞的紋章).
Distance Vector vs Link State Routing Protocols
Chapter 6 遞迴.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
補充 數值方法 數值方法.
第6章 硬盘实用程序 GHOST 6.0 硬盘克隆(Clone)、硬盘分区拷贝工具
Quicksort 本章的重點在介紹Quicksort的作法 然後給予時間複雜度的分析。.
英语教学实践中对“学讲”的领悟 李颖.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Sun-Star第六届全国青少年英语口语大赛 全国总决赛 2015年2月 北京
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
When using opening and closing presentation slides, use the masterbrand logo at the correct size and in the right position. This slide meets both needs.
Presentation transcript:

Recursion: The Mirrors Chapter 2 Recursion: The Mirrors

Recursive Solutions (遞迴求解) 遞迴是很有效的解決問題技巧 將問題分解成幾個較小(指引數的值會越來越接近基本狀況)的相同問題 是使用迴圈的列舉法 (iteration) 的替代方案 循序搜尋是一種列舉求解法 由資料集的最前面開始 依序檢視資料集的每一個項目 © 2005 Pearson Addison-Wesley. All rights reserved

Recursive Solutions 二位元搜尋是一種遞迴解法 重覆將資料集減半,並決定前半或後半會包含搜尋的項目 這使用了切割再征服 (divide and conquer) 策略 © 2005 Pearson Addison-Wesley. All rights reserved

Recursive Solutions 遞迴函式的幾個現象 遞迴函式會呼叫自己 每次遞迴呼叫解決一個相同但是較小的問題 測試到基本狀況時就不再遞迴呼叫 基本狀況: 在遞迴定義中已知答案的情形 問題會越來越小,最後較小的問題會達到基本狀況 © 2005 Pearson Addison-Wesley. All rights reserved

Recursive Solutions 建置遞迴函式的 4 個問題 如何將問題以相同之較小問題定義? 每一遞迴呼叫如何縮小問題? © 2005 Pearson Addison-Wesley. All rights reserved

Recursive Solutions 建置遞迴函式的 4 個問題(Continued) 那些狀況可以作為基本狀況? 隨著問題越來越小, 是否一定會達到基本狀況? © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: n ! (n 階乘) Problem 計算出 n! (以函式 factorial(n) 表示) factorial(n) 的列舉式定義(可用迴圈完成,請自己寫寫看) factorial(n) = n * (n-1) * (n-2) * … * 1 for any integer n > 0 factorial(0) = 1 © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n factorial(n) 的遞迴定義 factorial(n) = 1 if n = 0 = n * factorial(n-1) if n > 0 © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n 遞迴關係 一個新項目的值是利用之前項目的值來產生的數學公式 Example factorial(n) = n * [(n-1) * (n-2) * … * 1] = n * factorial(n-1) © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n 用方盒追蹤答案 (Box trace) 一種系統化的追蹤遞迴函式的動作的方法 每一方盒對應到一個啟動紀錄 (activation record) 包含了一個函式在遞迴呼叫時及遞迴呼叫結果的區域環境 © 2005 Pearson Addison-Wesley. All rights reserved

範例 © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n Figure 2.3 A box © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n © 2005 Pearson Addison-Wesley. All rights reserved

A Recursive Valued Method: The Factorial of n 一個函式的區域環境包括: 此函式的區域變數 (local variables) 各引數的值的複製 此函式結束後要回到 呼叫它的函式 的位置 ( return address, 是一記憶體地址 ) 函式自己本身的內容 © 2005 Pearson Addison-Wesley. All rights reserved

兔子的繁殖 (費式序列) (The Fibonacci Sequence) “Facts” about rabbits 兔子永遠不會死掉 每隻兔子都在出生 2 個月後成熟(可以開始繁殖), 也就是在出生後第 3 個月的開頭開始繁殖 每個月的開頭每對成熟的公兔及母兔會生下一對公兔及母兔 © 2005 Pearson Addison-Wesley. All rights reserved

Multiplying Rabbits (The Fibonacci Sequence) Problem 在第 n 個月共有幾對兔子? 遞迴關係 rabbit(n) = rabbit(n-1) + rabbit(n-2) © 2005 Pearson Addison-Wesley. All rights reserved

Multiplying Rabbits (The Fibonacci Sequence) Figure 2.10 Recursive solution to the rabbit problem © 2005 Pearson Addison-Wesley. All rights reserved

Multiplying Rabbits (The Fibonacci Sequence) © 2005 Pearson Addison-Wesley. All rights reserved

Multiplying Rabbits (The Fibonacci Sequence) 基本狀況 rabbit(2), rabbit(1) 遞迴定義 rabbit(n) = 1 if n is 1 or 2 = rabbit(n-1) + rabbit(n-2) if n > 2 費氏序列 以 rabbit(1), rabbit(2), rabbit(3), … 這些值形成的序列 © 2005 Pearson Addison-Wesley. All rights reserved

Mr. Spock’s 兩難問題 (自 n 個物件取出 k 個的可能組合個數) Problem 在太陽系中要自 n 個星球中選擇 k 個星球來加以探索的可能組合個數? © 2005 Pearson Addison-Wesley. All rights reserved

Mr. Spock’s Dilemma (Choosing k out of n Things) 以 c(n, k) 表示自 n 個星球中選擇 k 個星球的可能組合個數 以星球 X 來看: c(n, k) = X 含在 k 個星球的可能組合個數 + X 不含在 k 個星球的可能組合個數 © 2005 Pearson Addison-Wesley. All rights reserved

Mr. Spock’s Dilemma (Choosing k out of n Things) 自 n 個物件取出 k 個的可能組合個數是以下兩數之和 自 n-1 個物件取出 k-1 個的可能組合個數 及自 n-1 個物件取出 k 個的可能組合個數 c(n, k) = c(n-1, k-1) + c(n-1, k) © 2005 Pearson Addison-Wesley. All rights reserved

Mr. Spock’s Dilemma (Choosing k out of n Things) 基本狀況 自 k 個物件取出 k 個只有一種取法 c(k, k) = 1 什麼都不取的取法也只有一種 c(n, 0) = 1 無法取出比 n 更多個物件 c(n, k) = 0 if k > n © 2005 Pearson Addison-Wesley. All rights reserved

Mr. Spock’s Dilemma (Choosing k out of n Things) 遞迴定義 c(n, k) = 1 if k = 0 1 if k = n 0 if k > n c(n-1, k-1) + c(n-1, k) if 0 < k < n © 2005 Pearson Addison-Wesley. All rights reserved

Mr. Spock’s Dilemma (Choosing k out of n Things) Figure 2.12 The recursive calls that c(4, 2) generates © 2005 Pearson Addison-Wesley. All rights reserved

Searching an Array: 找到陣列最大值 遞迴解法 if (anArray 只有一個項目) { maxArray(anArray) 就是該項目 } else if (anArray 有不只一個項目) { maxArray(anArray) 是以下兩數之最大值: maxArray( anArray 的前面一半陣列) 及 maxArray( anArray 的後面一半陣列) } // end if © 2005 Pearson Addison-Wesley. All rights reserved

Searching an Array: Finding the Largest Item in an Array Figure 2.13 Recursive solution to the largest-item problem © 2005 Pearson Addison-Wesley. All rights reserved

找到陣列中第 k 個最小值 遞迴解法: 由陣列中選擇一個樞紐項目 將陣列的項目重組, 或切割, 成比此樞紐項目小及比此樞紐項目大的陣列(排序) 將此策略遞迴用於其中的一個切割 © 2005 Pearson Addison-Wesley. All rights reserved

Finding the kth Smallest Item in an Array Figure 2.18 A partition about a pivot © 2005 Pearson Addison-Wesley. All rights reserved

Finding the kth Smallest Item in an Array Let: kSmall(k, anArray, first, last) = anArray[first..last] 中第 k 個最小項目 © 2005 Pearson Addison-Wesley. All rights reserved

Finding the kth Smallest Item in an Array 解答(假設陣列已排序): kSmall(k, anArray, first, last) = kSmall(k,anArray,first,pivotIndex-1) if k < pivotIndex – first + 1 = p if k = pivotIndex – first + 1 = kSmall(k-(pivotIndex-first+1), anArray, pivotIndex+1, last) if k > pivotIndex – first + 1 © 2005 Pearson Addison-Wesley. All rights reserved

Organizing Data: The Towers of Hanoi (河內塔) Figure 2.19a and b a) The initial state; b) move n - 1 disks from A to C © 2005 Pearson Addison-Wesley. All rights reserved

The Towers of Hanoi Figure 2.19c and d c) move one disk from A to B; d) move n - 1 disks from C to B © 2005 Pearson Addison-Wesley. All rights reserved

The Towers of Hanoi 擬程式碼 solveTowers(count,source,destination,spare) if (count is 1) { 直接將盤子由 source 移至 destination } else { solveTowers(count-1, source, spare, destination) solveTowers(1, source, destination, spare) solveTowers(count-1, spare, destination, source) } //end if © 2005 Pearson Addison-Wesley. All rights reserved

Recursion and Efficiency(效率) 有些遞迴解法非常慢,以致於不應該被採用 造成遞迴解法非常慢的原因 遞迴呼叫的花費時間 某些遞迴演算法內在就是無效率 © 2005 Pearson Addison-Wesley. All rights reserved

Recursion and Efficiency 如果某遞迴演算法無效率,又存在一個清楚而有效率的列舉解法,那就不要採用該遞迴演算法 如課本 p. 101 頁計算費氏序列的列舉演算法就是清楚而有效率的列舉解法 © 2005 Pearson Addison-Wesley. All rights reserved

Summary Recursion solves a problem by solving a smaller problem of the same type Four questions: How can you define the problem in terms of a smaller problem of the same type? How does each recursive call diminish the size of the problem? What instance of the problem can serve as the base case? As the problem size diminishes, will you reach this base case? © 2005 Pearson Addison-Wesley. All rights reserved

Summary A recursive call’s postcondition can be assumed to be true if its precondition is true The box trace can be used to trace the actions of a recursive method Recursion can be used to solve problems whose iterative solutions are difficult to conceptualize © 2005 Pearson Addison-Wesley. All rights reserved

Summary Some recursive solutions are much less efficient than a corresponding iterative solution due to their inherently inefficient algorithms and the overhead of method calls If you can easily, clearly, and efficiently solve a problem by using iteration, you should do so © 2005 Pearson Addison-Wesley. All rights reserved