CS 46B: Introduction to Data Structures June 25 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak.

Slides:



Advertisements
Similar presentations
Recursion Ellen Walker CPSC 201 Data Structures Hiram College.
Advertisements

Recursive methods. Recursion A recursive method is a method that contains a call to itself Often used as an alternative to iteration when iteration is.
Chapter 10 Recursion Instructor: alkar/demirer. Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-2 Recursive Function recursive functionThe.
CS102 Algorithms and Programming II1 Recursion Recursion is a technique that solves a problem by solving a smaller problem of the same type. A recursive.
1 Introduction to Recursion  Introduction to Recursion  Example 1: Factorial  Example 2: Reversing Strings  Example 3: Fibonacci  Infinite Recursion.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. ETC - 1 What comes next? Recursion (Chapter 15) Recursive Data Structures.
1 CSCD 300 Data Structures Recursion. 2 Proof by Induction Introduction only - topic will be covered in detail in CS 320 Prove: N   i = N ( N + 1.
Chapter 10 Recursion Dr. Jiung-yao Huang Dept. Comm. Eng. Nat. Chung Cheng Univ. TA: 鄭筱親 陳昱豪.
Recursion A recursive function is a function that calls itself either directly or indirectly through another function. The problems that can be solved.
CS 146: Data Structures and Algorithms June 2 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
CS 46B: Introduction to Data Structures June 4 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
Unit 7 1 Unit 7: Recursion H Recursion is a fundamental programming technique that can provide an elegant solution to a certain kinds of problems H In.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Recursion.
Introduction to Programming (in C++) Recursion Jordi Cortadella, Ricard Gavaldà, Fernando Orejas Dept. of Computer Science, UPC.
CS 46B: Introduction to Data Structures July 30 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak.
Department of Computer Engineering Recursive Problem Solving Computer Programming for International Engineers.
CS 46B: Introduction to Data Structures July 7 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
CS 146: Data Structures and Algorithms June 16 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
CS 152: Programming Language Paradigms February 24 Class Meeting Department of Computer Science San Jose State University Spring 2014 Instructor: Ron Mak.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12: Recursion Problem Solving, Abstraction, and Design using C++
Recursion.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 13 - Recursion.
RECURSION Lecture 7 CS2110 – Fall Overview references to sections in text 2  Note: We’ve covered everything in JavaSummary.pptx!  What is recursion?
The Java Programming Language
Recursion Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
Slides prepared by Rose Williams, Binghamton University ICS201 Lecture 19 : Recursion King Fahd University of Petroleum & Minerals College of Computer.
CS 46B: Introduction to Data Structures June 16 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak.
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
CS 46B: Introduction to Data Structures July 9 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
Recursion Recursion Chapter 12. Outline n What is recursion n Recursive algorithms with simple variables n Recursion and the run-time stack n Recursion.
Java Programming: Guided Learning with Early Objects Chapter 11 Recursion.
Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1 Chapter 18 Recursion Lecture 6 Dr. Musab.
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 15 * Recursive Algorithms.
CS 46B: Introduction to Data Structures June 9 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
CS 153: Concepts of Compiler Design November 23 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
1 Recursion Recursion is a powerful programming technique that provides elegant solutions to certain problems. Chapter 11 focuses on explaining the underlying.
CS 146: Data Structures and Algorithms June 4 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
1 Chapter 8 Recursion. 2 Objectives  To know what is a recursive function and the benefits of using recursive functions (§8.1).  To determine the base.
CS 46B: Introduction to Data Structures June 30 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak.
CS 146: Data Structures and Algorithms June 11 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
CS 46B: Introduction to Data Structures July 21 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak.
CS 46B: Introduction to Data Structures July 23 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak.
1 CS1120: Recursion. 2 What is Recursion? A method is said to be recursive if the method definition contains a call to itself A recursive method is a.
1 Recursion Recursive function: a function that calls itself (directly or indirectly). Recursion is often a good alternative to iteration (loops). Its.
Quiz: Design a Product Class Create a definition for a class called Product, which keeps track of the following information: –Name of the product –Weight.
CS 154 Formal Languages and Computability March 8 Class Meeting Department of Computer Science San Jose State University Spring 2016 Instructor: Ron Mak.
chap10 Chapter 10 Recursion chap10 2 Recursive Function recursive function The recursive function is a kind of function that calls.
Recursion Chapter What is recursion? Recursion occurs when a method calls itself, either directly or indirectly. Used to solve difficult, repetitive.
Recursion Definition Recursion is the computer programming process, whereby a method calls itself.
CSE 143 Lecture 9: introduction to recursion reading: 12.1.
1 Dr. Chow-Sing LinRecursion - CH 10 Problem Solving and Program Design in C Chapter 9 Recursion Chow-Sing Lin.
Chapter 9 Recursion. Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-2 Recursive Function recursive functionThe recursive function is –a.
Lecture 9: introduction to recursion reading: 12.1
Chapter 15 Recursion.
Building Java Programs
Chapter 10 Recursion Instructor: Yuksel / Demirer.
Chapter 10 Recursion Dr. Jiung-yao Huang Dept. Comm. Eng.
Chapter 15 Recursion.
Java Software Structures: John Lewis & Joseph Chase
Chapter 12 Recursion (methods calling themselves)
CS1120: Recursion.
SELECTION STATEMENTS (2)
Recursion Data Structures.
The Hanoi Tower Problem
Java Programming: Chapter 9: Recursion Second Edition
Dr. Sampath Jayarathna Cal Poly Pomona
Building Java Programs
CS 144 Advanced C++ Programming April 16 Class Meeting
Presentation transcript:

CS 46B: Introduction to Data Structures June 25 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 1 2 public class Frequency { public static void main(String args[]) { if (args.length < 2) { System.out.println("*** Invalid arguments."); System.exit(-1); } String filePath = args[0]; String searchWord = args[1]; int count = 0; Scanner in = null; try { in = new Scanner(new File(filePath)); in.useDelimiter("[^A-Za-z]");

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 1, cont’d 3 try { in = new Scanner(new File(filePath)); in.useDelimiter("[^A-Za-z]"); while (in.hasNext()) { if (searchWord.equalsIgnoreCase(in.next())) ++count; } System.out.printf("The word \"%s\" appears %d times in file %s\n", searchWord, count, filePath); } catch (FileNotFoundException ex) { System.out.println("*** File not found: " + filePath); } finally { if (in != null) in.close(); } } }

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 2a 4 public class Name implements Comparable { private String name; private String first; private String last; public String getName() { return name; } public Name(String name) { this.name = name; String parts[] = name.split(" "); this.first = parts[0]; this.last = parts[1]; } public int compareTo(Object other) { Name otherName = (Name) other; return this.last.compareTo(otherName.last); }

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Questions 2b and 2c 5 public int compareTo(Object other) { Name otherName = (Name) other; return -this.last.compareTo(otherName.last); } public int compareTo(Object other) { Name otherName = (Name) other; return this.name.length() - otherName.name.length(); }

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 3 6 public static void main(String args[]) { Scanner in = null; try { in = new Scanner(new File(INPUT_FILE_NAME)); (new Graph(in)).printGraph(); } catch (FileNotFoundException ex) { System.out.println("*** File not found: " + INPUT_FILE_NAME); } finally { if (in != null) in.close(); }

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 3, cont’d 7 private void printGraph() { System.out.printf("%-12s %-5s\n\n", "LANGUAGE", "SHARE"); in.nextLine(); while (in.hasNextLine()) { Scanner line = new Scanner(in.nextLine()); line.useDelimiter("[,%]"); line.next(); String language = line.next(); float share = line.nextFloat(); long count = Math.round(share); System.out.printf("%-12s %5.2f% ", language, share); for (int i = 1; i <= count; i++) System.out.print("*"); System.out.println(); line.close(); } }

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 4a  Because class Bird implements interface Vocal, it must implement method vocalize(). 8 public class Bird extends Animal implements Vocal { public void move() { System.out.println("Flap, flap!"); } public interface Vocal { void vocalize(); }

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 4b 9 public class Mammal extends Animal implements Vocal { public void vocalize() { System.out.println("Grrr!"); } public class Dog extends Mammal { public void vocalize() { super.vocalize(); System.out.println("Arf!"); } }

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 4c 10 Mammal m = new Dog(); m.move(); Vocal v = new Dog(); v.vocalize(); try { v.move(); } catch (ClassCastException ex) { System.out.println("Can't move!"); }  You cannot call move() on variable v since the type of v is Vocal.  Try-catch is for catching runtime errors and doesn’t prevent compile-time errors.

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 5a  Possible classes (look for nouns): University Department Klass Classroom Calendar TimeOfDay Student WaitingList 11 Why the funny spelling?

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 5a, cont’d  Department Responsibilities  maintain list of classes  schedule classes  open classes for registration by students Collaborators  Klass  Classroom  Calendar  TimeOfDay  Students 12

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 5a, cont’d  Klass Responsibilities  maintain list of students  maintain waiting list Collaborators  Student  WaitingList 13

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 5a, cont’d  Student Responsibilities  register for classes Collaborators  Klass 14

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 5a, cont’d  WaitingList Responsibilities  maintain list of students Collaborators  Student 15

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Midterm Solution: Question 5b  Department aggregates Klass one department has many classes  Klass aggregates WaitingList each class has one waiting list  WaitingList aggregates Student one waiting list has zero, one, or more students 16

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Quizzes  Do quizzes 7, 8, and 9 by next 9:00 AM next Tuesday, June 30.  These cover Chapter 13, sections 13.1 – 13.4 and Worked Example

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Break 18

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Recursion  Recursion requires a whole new way of thinking.  Recursion is a required skill for all programmers. 19 Oh, no! Not recursion!

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak How to Think Recursively  Does this problem contain a simpler but similar case of the problem?  Can I solve the overall problem if I can solve the simpler case?  Is there a simplest case that has an immediate and obvious solution? This is called the base case. 20

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Factorials: The Classic Recursion Problem  5! = 5 x 4 x 3 x 2 x 1 = 5 x 4!  Therefore, we can solve 5! if we can solve 4! 4! is a simpler but similar case of the problem.  We can solve 4! = 4 x 3! if we can solve 3!  We can solve 3! = 3 x 2! if we can solve 2!  We can solve 2! = 2 x 1! if we can solve 1!  But by definition, 1! = 1 21

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Factorials, cont’d  But by definition, 1! = 1 That’s the simplest case (base case) with an immediate and obvious solution.  Therefore, 2! = 2 x 1! = 2 x 1 = 2  Therefore, 3! = 3 x 2! = 3 x 2 = 6  Therefore, 4! = 4 x 3! = 4 x 6 = 24  Therefore, 5! = 5 x 4! = 5 x 24 =

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Factorials, cont’d  Solve n ! recursively:  What’s the base case? 1! = 1  What’s the simpler but similar case? ( n -1)! Note that n -1 is closer to the base case of private int fact(int n) { if (n <= 1) return 1; else return n*fact(n-1); } Factorial.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Recursive Multiplication  Solve i x j recursively.  Base case: i equals 0: product = 0 i equals 1: product = j  Simpler but similar case: If we can solve the problem for i -1 (which is closer to 0 and 1), then i x j is [( i -1) x j ] + j 24

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Recursive Multiplication, cont’d 25 private long multiply(int i, int j) { switch (i) { case 0: return 0; case 1: return j; default: return j + multiply(i-1, j); } Multiplier.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Iterative Fibonacci  Fibonacci sequence: f n = f n-2 + f n-1 f 1 = 1 f 2 = 1  An iterative solution: 26 private long fibonacci(int n) { if (n <= 2) return 1; else { long older = 1; long old = 1; long next = 1; for (int i = 3; i <= n; i++) { next = older + old; older = old; old = next; } return next; } Fibonacci.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Recursive Fibonacci  According to the definition:  f n = f n-2 + f n-1 f 1 = 1 f 2 = 1 27 private long fibonacci(int n) { if (n <= 2) return 1; else return fibonacci(n-2) + fibonacci(n-1); } FibonacciRecursive.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Recursive Fibonacci, cont’d  Why does the recursive solution take a long time when n is large?  Let’s trace the recursive calls: 28 private long fibonacci(int n) { System.out.printf("Called fibonaaci(%d)\n", n); long f; if (n <= 2) f = 1; else f = fibonacci(n-2) + fibonacci(n-1); System.out.printf("Returning fibonacci(%d) = %d\n", n, f); return f; } FibonacciTrace.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Recursive Fibonacci, cont’d 29

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Member of  Given a list of n integers, is x in the list?  Base case The list is empty: x is not in the list.  Simpler but similar case: Either x is equal to the first element in the list, or x is in the rest of the list. The rest of the list is one shorter, so it’s closer to the base case. 30

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Member of, cont’d 31 private boolean memberOf(int x, ArrayList list) { if (list.size() == 0) return false; else { int first = list.get(0); list.remove(0); return (x == first) || memberOf(x, list); } Unfortunately, this version of memberOf() destroys its list parameter. Member.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Member of, cont’d 32 private boolean memberOf2(int x, ArrayList list) { if (list.size() == 0) return false; else { int first = list.get(0); list.remove(0); return (x == first) || memberOf2(x, list); } private boolean memberOf(int x, ArrayList list) { ArrayList temp = (ArrayList ) list.clone(); return memberOf2(x, temp); } This version doesn’t harm its list parameter.

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Unique  Given a list of n integers in a list, remove all the duplicate values so that what remains is a list of unique values.  Base case The list is empty or it contains only one value: Just return the list (it’s empty or it has a single unique value).  Simpler but similar case: Take out the first value. Make the rest of the list unique. Then if the value we took out is not in the rest of the list, put it back. Otherwise, leave it out. 33

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Unique, cont’d 34 private ArrayList unique(ArrayList list) { if (list.size() <= 1) return list; else { int first = list.get(0); list.remove(0); ArrayList ulist = unique(list); // rest of list if (memberOf(first, ulist)) return ulist; else { ulist.add(0, first); // put back the first element return ulist; } Unique.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Reverse  Reverse the values of a list of n integers.  Base case The list is empty or it contains only one value: Just return the list.  Simpler but similar case: Take out the first value of the list. Reverse the rest of the list. Append the removed value to the end of the reversed rest of the list. 35

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Reverse, cont’d 36 private ArrayList reverse(ArrayList list) { if (list.size() <= 1) return list; else { int first = list.get(0); list.remove(0); // remove first element reverse(list).add(first); // append it to the end return list; } Reverse.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak 37 Towers of Hanoi  Goal: Move the stack of disks from the source pin to the destination pin. You can move only one disk at a time. You cannot put a larger disk on top of a smaller disk. Use the third pin for temporary disk storage.

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak 38 Towers of Hanoi, cont’d  Label the pins A, B, and C. A: source B: temporary C: destination  Base case: n = 1 disk Move disk from A to C (source  destination)  Simpler but similar case: n -1 disks Solve for n -1 disks (source  temp) Move disk from A to C (source  destination) Solve for n -1 disks (temp  destination

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak 39 Towers of Hanoi, cont’d private static final char A = 'A'; // initial source private static final char B = 'B'; // initial temp private static final char C = 'C'; // initial destination private static int count = 0; private static void move(char from, char to) { System.out.printf("%2d: Move disk from %c to %c.\n", ++count, from, to); } public static void main(String args[]) { int n = 6; System.out.printf("Solve for %d disks:\n\n", n); solve(n, A, B, C); } Hanoi1.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak 40 Towers of Hanoi, cont’d  Solve n disks (source = A, destination = C) Solve for n -1 disks (source  temp) Move disk from A to C (source  destination) Solve for n -1 disks (temp  destination) private static void solve(int n, char source, char temp, char destination) { if (n > 0) { solve(n-1, source, destination, temp); move(source, destination); solve(n-1, temp, source, destination); } Hanoi.java

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Homework 5: Write Recursive Methods  Method read() reads and prints a text file line by line. Its parameter is a text Scanner object. Input will be the text file GettysburgAddress.txt. Codecheck URL: 5nux3kfu2ypvk7t9da0fw 5nux3kfu2ypvk7t9da0fw 41 Note: DNS problems with For the next 48 hours, replace with For example: /codecheck/files/ psp5nux3kfu2ypvk7t9da0fw

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Homework 5, cont’d  Method allSame() has a string parameter and returns true if all the characters of the string are the same, and false otherwise. Codecheck URL: e6dph2n9pejrc4o49s8ax e6dph2n9pejrc4o49s8ax 42

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Homework 5, cont’d  Method count() has two parameters, a character and a string. It returns the number of occurrences the character is in the string (case sensitive comparisons). Codecheck URL: gmlhoag9dokoccytmfrhy gmlhoag9dokoccytmfrhy 43

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Homework 5, cont’d  Method append() has two parameters that are array lists of integers. It returns an array list that is the second array list appended to the end of the first array list. Codecheck URL: ch3xgnds2e8b833tkb4qz ch3xgnds2e8b833tkb4qz 44

Computer Science Dept. Summer 2015: June 25 CS 46B: Introduction to Data Structures © R. Mak Homework 5, cont’d  All your methods must be recursive. You may be surprised by how short they are.  Canvas: Homework 5 Final  Due: Monday, June 29 at 11:59 PM 45