Chapter 5 Recursion.

Slides:



Advertisements
Similar presentations
第七课:电脑和网络. 生词 上网 vs. 网上 我上网看天气预报。 今天早上看了网上的天气预报。 正式 zhèngshì (报告,会议,纪录) 他被这所学校正式录取 大桥已经落成,日内就可以正式通车 落伍 luòw ǔ 迟到 chídào 他怕迟到,六点就起床了.
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
河內塔(Hanoi)問題.
Introduction 基本概念 授課老師:蕭志明
四資二甲 第三週作業 物件導向程式設計.
新闻写作的特点与技巧 主讲:毛兆宏.
算法设计与分析 Algorithm Design and Analysis
Performance Evaluation
如何更好地撰写提案 阳西县政协副主席 钟基建 2015年1月.
-Artificial Neural Network- Hopfield Neural Network(HNN) 朝陽科技大學 資訊管理系 李麗華 教授.
The discipline of algorithms
程設一.
第二章 JAVA语言基础.
第8章 字串與陣列 8-1 字串處理 8-2 一維陣列的處理 8-3 建立多維陣列 8-4 不規則陣列與參數傳遞 8-5 陣列排序與搜尋.
程設一.
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
API设计实例分析 通用IO API.
Chapter 4 歸納(Induction)與遞迴(Recursion)
物件導向程式設計 (Object-Oriented rogramming)
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
第四次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
第二章 共轴球面系统的物像关系 Chapter 2: Object-image relations of coaxial spheric system.
本單元介紹何謂變數,及說明變數的宣告方式。
JAVA程序设计 第5章 深入理解JAVA语言----补充.
程式設計實作.
创建型设计模式.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
C 語言簡介 - 2.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
算法设计与分析.
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
子博弈完美Nash均衡 我们知道,一个博弈可以有多于一个的Nash均衡。在某些情况下,我们可以按照“子博弈完美”的要求,把不符合这个要求的均衡去掉。 扩展型博弈G的一部分g叫做一个子博弈,如果g包含某个节点和它所有的后继点,并且一个G的信息集或者和g不相交,或者整个含于g。 一个Nash均衡称为子博弈完美的,如果它在每.
Cyclic Hanoi问题 李凯旭.
Java程序设计 第2章 基本数据类型及操作.
Advisor : Prof. Frank Y.S. Lin Presented by Yen-Yi, Hsu
L14哪里来?哪里去? Where to come? Where to go? 名字:________ Name:
鄧姚文 資料結構 第一章:基本概念 鄧姚文
鄧姚文 資料結構 第五章:遞迴 鄧姚文
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
Respect cannot be demanded, it must be earned
中央社新聞— <LTTC:台灣學生英語聽說提升 讀寫相對下降>
关联词 Writing.
第二章 Java基本语法 讲师:复凡.
第五次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
Inheritance -II.
Interfaces and Packages
Disjoint Sets Michael Tsai 2013/05/14.
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
计算机问题求解 – 论题1-5 - 数据与数据结构 2018年10月16日.
Review 1~3.
第五次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
赵才荣 同济大学,电子与信息工程学院,智信馆410室
第二章 Java基本语法 讲师:复凡.
 隐式欧拉法 /* implicit Euler method */
2012 程式設計比賽 Openfind 天使帝國 v2.0 (蓋亞的紋章).
本章主題 C++的程式結構 資料型態與宣告 算術運算 簡易的輸入輸出指令 程式編譯(Compile)的過程與原理.
怎樣把同一評估 給與在不同班級的學生 How to administer the Same assessment to students from Different classes and groups.
第2章 Java语言基础.
C#快速導讀 流程控制.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
Respect cannot be demanded, it must be earned
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:

Chapter 5 Recursion

Chap.5 Contents 5.1 Introduction 5.2 Factorial 5.2.1 Execution Frames 5.3 Decimal to Binary 5.4 Towers of Hanoi 5.4.1 Analysis of the move Method 5.5 Searching An Array 5.6 Backtracking 5.6.1 An A-maze-ing Application 5.8 The Cost of Recursion

Recursive v.s. Iterative OCCUR 發生 RECUR 重覆發生 Recursion Recursive ITERATE 重覆發生 Iteration Iterative

5.1 Introduction

5.2 Factorial

5.2.1 Execution Frames

5.3 Decimal to Binary

Example 3: Towers of Hanoi 河內塔

Design sketch for case n=4 1.First, see if the simplest case n=1 works. 首先, 假設最簡單的例子 n=1. 2.Next, by mathematical induction, assuming n=3 works, that is, 3 disks can be magically moved to the destination, 接下來, 用數學歸納法假設n=3 那就是3個disks移動到目的地 3.Then, draw design sketches to solve n=4, 4 disks problem. 然後, 畫出設計草圖來解決n=4, 4個disks的問題

The simplest case n=1 Simply move the disk from A to B. It is done. 簡單的移動disk從A到B. Thus, case n=1 works. 這樣 case n =1就做完了. Next, try to solve n=4 case by assuming n=3 works. 接下來, 使用n=3的方式來解決n=4的case

下面四張 n=4 的設計草圖 清楚引導出 後面虛凝碼 (演算法) 的設計 這是軟體開發的重要工序 至於如何想出設計草圖? 經驗加能力吧

Tower of Hanoi Tower of hanoi http://www.cut-the-knot.org/recurrence/hanoi.shtml

2) 把 disk n (disk 4) 從A移到B

3) 把 n-1 (that is 3) disks 從 C 移動到 B

/** move 決定disks從原來的pole移動到目的pole所需要的步驟. * The worstTime(n) is O(2n). * * @param n n個disk需要被移動. * @param orig disk一開始所在的pole. * @param dest 目的的pole. * @param temp 當作暫時存放的pole. * @return 以一個字串表示需要如何移動. * @throws IllegalArgumentException if n 小於或等於0. */ public static String move (int n, char orig, char dest, char temp) { final String DIRECT_MOVE = "Move disk " + n + " from " + orig + " to " + dest + "\n"; if (n <= 0) throw new IllegalArgumentException( ); if (n == 1) return DIRECT_MOVE; return move (n ‑ 1, orig, temp, dest) + DIRECT_MOVE + move (n ‑ 1, temp, dest, orig) ; } // end of move

5.4.1 Analysis of the move Method

The total number of calls to move is: 移動所需要的全部calls次數是: 1 + 2 + 4 + … + 2n-1 = Σ 2i i=0

See example 6 of Appendix 2 for a proof by mathematical induction.

This shows that: worstTime(n) is O(2n)

To trace the execution of this recursive move function: http://www.cs.lafayette.edu/~collinsw/hanoi2/hanoiins.html

5.5 Searching An Array

比較 英文 與 中文method descriptions 接下來的兩頁是中文的版本. 比較這兩個版本. 哪一個版本 比較容易瞭解?

英詞中句 interface /* 用 binary search 在特定 array 找特定object. array 須依自然順序排序,否則結果 undefined. if array 含多個特定object, 不保證找到何者 The worstTime(n) is O(log n). @param a – 被找的 array @param first – array目前找尋範圍的最小index @param last - array目前找尋範圍的最大index @param key - 要找的object.

public static int binarySearch (Object[ ] a, int first, int last, @return 要找的 object 的 index, if 此 object 存在 array 中 傳回找到的 index else 傳回 - insertion point -1 insertion point 為將此 object 按順序插入 array 中的 index @throws ClassCastException if array 含有不能互相 compare 的 elements (如 strings 與 integers) or 要找的 object 不能與 array 中的 elements 互相 compare */ public static int binarySearch (Object[ ] a, int first, int last, Object key)

5.6 Backtracking Backtracking is the strategy of trying to reach a goal by a sequence of chosen positions, with re-tracing in reverse order of positions that cannot lead to the goal. Backtracking 是試著以 一系列選取的 positions 到達目的地的策略,同時依不能通到目的地的positions的相反順序倒退.

Strategy: try to go west; if unable to go west, try to go south; if unable to go south, backtrack (until you can go south). 試著向西, 如果沒辦法向西, 就試著向南; 如果不能向南, 就返回原路 (直到你可以向南) Do not go to any position that has been shown not to lead to a goal. The goal is either G1 or G2. Start at P1. 不要去任何已經被標示不能通到終點的位置. 終點不是G1就是G2. 起點是P1. P3 P2 P1 P4 P5 G2 P7 P6 G1    

For example, P4 is not visited from P5. When a position is visited, it is marked as (potentially) being on a path to the goal. 當一個地點被拜訪時, 它會被標示當作(可能的)通往終點的路徑. If we discover otherwise, the marking must be undone, so that position will never again be visited. 如果我們發現不是, 標記就會被取消, 這個地點不會再被拜訪. For example, P4 is not visited from P5. 例如, P4 不會被從P5拜訪.  

within the general framework of backtracking, We will solve this: 我們將解決這一個問題: maze-search problem within the general framework of backtracking, 使用一般的backtracking 的 framework , which can easily be utilized in other applications. 它可以比較輕易的被其它applications利用.

The Application interface and the Backtrack class are generic:   The Application interface and the Backtrack class are generic: 這個Application interface和Backtrack class為泛型: They are the same for any backtracking project. 對於任何backtracking project, 它們是相同的.

import java.util.*;   public interface Application { // 如果pos是合法位置 就回傳true. boolean isOK (Position pos);    // 標示pos為可能在通往終點的路徑上. void markAsPossible (Position pos); // 如果pos是終點 傳回true. boolean isGoal (Position pos);

//標示pos為不在通往終點的路徑上. void markAsDeadEnd (Position pos);   //回傳字串表示方式. String toString(); //回傳 iterator 從 pos 可直接到達的 positions. Iterator<Position> iterator (Position pos); } // interface Application

5.6.1 An A-maze-ing Application

Maze searching: 1 = Corridor; 0 = Wall start 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 finish Iterator choices: north, east, south, west Marked as possible = 9; dead end = 2

Solution: 9 = Path; 2 = dead end 9 9 9 0 2 2 0 0 0 2 2 2 2 1 0 9 9 9 0 2 2 2 2 2 0 2 1 0 0 0 9 0 2 0 2 0 2 0 2 1 0 0 0 9 2 2 0 2 0 2 2 2 1 1 1 1 9 0 0 0 0 1 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 9 9 9 9 9 9 9 9 9

All that need to be developed are: the Position class, 所有需要開發的是: the Position class, the class that implements the Application interface and a tester. 這個class實做Application interface和 tester. For this application, a position is simply a row and column, so: 對於這一個application, Position就是row和column, 所以:

Exercise: Recall the solution when the order was north, east, south, west: 9 9 9 0 2 2 0 0 0 2 2 2 2 1 0 9 9 9 0 2 2 2 2 2 0 2 1 0 0 0 9 0 2 0 2 0 2 0 2 1 0 0 0 9 2 2 0 2 0 2 2 2 1 1 1 1 9 0 0 0 0 1 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 9 9 9 9 9 9 9 9 9

Re-solve with the order north, east, west, south: start 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 finish Hint: Only one ‘1’ remains.