Lecture 2 Feb 3, 2009 goals: continue recursion more examples of recursive programs.

Slides:



Advertisements
Similar presentations
Lecture 6 Sept 11, 2008 Goals for the day: Linked list and project # 1 list class in STL (section 3.3) stack – implementation and applications.
Advertisements

CS 1031 Recursion (With applications to Searching and Sorting) Definition of a Recursion Simple Examples of Recursion Conditions for Recursion to Work.
The University of Adelaide, School of Computer Science
Linked Lists. 2 Merge Sorted Lists Write an algorithm that merges two sorted linked lists The function should return a pointer to a single combined list.
Linked list Applications: Polynomial handling. Representing a polynomial using a linked list Store the coefficient and exponent of each term in nodes.
Stephen P. Carl - CS 2421 Recursive Sorting Algorithms Reading: Chapter 5.
ADA: 4. Divide/Conquer1 Objective o look at several divide and conquer examples (merge sort, binary search), and 3 approaches for calculating their.
Lecture 3 Feb 4 summary of last week’s topics and review questions (handout) Today’s goals: Chapter 1 overview (sections 1.4 to 1.6) c++ classes constructors,
Programming Recursion.
Search and Recursion pt. 2 CS221 – 2/25/09. How to Implement Binary Search Take a sorted data-set to search and a key to search for Start at the mid-point.
Computer Science II Recursion Professor: Evan Korth New York University.
Recursion. Idea: Some problems can be broken down into smaller versions of the same problem Example: n! 1*2*3*…*(n-1)*n n*factorial of (n-1)
CS 315 March 24 Goals: Heap (Chapter 6) priority queue definition of a heap Algorithms for Insert DeleteMin percolate-down Build-heap.
Lecture 2 Aug goals: Introduction to recursion examples of recursive programs.
Lecture 2 Aug 28 goals: Introduction to recursion examples of recursive programs.
Algorithm Design Techniques: Induction Chapter 5 (Except Sections 5.6 and 5.7)
Lecture 12 Oct 13, 2008 Some simple recursive programs recursive problem solving, connection to induction Some examples involving recursion Announcements.
Lecture 12 Oct 15 Recursion – more examples Chapter 8 problems and solutions Cell arrays, Chapter 10.
Algorithm Design Techniques: Induction Chapter 5 (Except Section 5.6)
Lecture 5 Sept 12, 2011 Goals: Linked list (Chapter 3) list class in STL (section 3.3) implementing with linked lists.
CS 206 Introduction to Computer Science II 10 / 14 / 2009 Instructor: Michael Eckmann.
2420 Review Questions Chapter 6.
CS2420: Lecture 10 Vladimir Kulyukin Computer Science Department Utah State University.
Recursion Road Map Introduction to Recursion Recursion Example #1: World’s Simplest Recursion Program Visualizing Recursion –Using Stacks Recursion Example.
1 Chapter 18 Recursion Dale/Weems/Headington. 2 Chapter 18 Topics l Meaning of Recursion l Base Case and General Case in Recursive Function Definitions.
Lecture 4 Feb 5 completion of recursion (inserting into a linked list as last item) analysis of algorithms – Chapter 2.
Lecture 4 Sept 4 Goals: chapter 1 (completion) 1-d array examples Selection sorting Insertion sorting Max subsequence sum Algorithm analysis (Chapter 2)
Simple Recursion. COMP104 Lecture 35 / Slide 2 Recursion: Example 0 * What does the following program do? #include using namespace std; int fac(int n){
CHAPTER 10 Recursion. 2 Recursive Thinking Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
Lecture 5 Feb 14, 2011 Goals: Linked list (Chapter 3) list class in STL (section 3.3) implementing with linked lists.
Recursion Bryce Boe 2013/11/18 CS24, Fall Outline Wednesday Recap Lab 7 Iterative Solution Recursion Binary Tree Traversals Lab 7 Recursive Solution.
A Computer Science Tapestry 1 Recursion (Tapestry 10.1, 10.3) l Recursion is an indispensable technique in a programming language ä Allows many complex.
1 Decrease-and-Conquer Approach Lecture 06 ITS033 – Programming & Algorithms Asst. Prof. Dr. Bunyarit Uyyanonvara IT Program, Image and Vision Computing.
Ceng-112 Data Structures I Chapter 6 Recursion.
Advance Data Structure and Algorithm COSC600 Dr. Yanggon Kim Chapter 1.
Stacks. An alternative storage structure for collections of entities is a stack. A stack is a simplified form of a linked list in which all insertions.
Week 5 - Monday.  What did we talk about last time?  Linked list implementations  Stacks  Queues.
Analyzing Complexity of Lists OperationSorted Array Sorted Linked List Unsorted Array Unsorted Linked List Search( L, x ) O(logn) O( n ) O( n ) Insert(
Lecturer: Dr. AJ Bieszczad Chapter 11 COMP 150: Introduction to Object-Oriented Programming 11-1 l Basics of Recursion l Programming with Recursion Recursion.
C Programming Lecture 8-2 : Function (advanced). Recursive Function (recursion) A function that calls itself (in its definition) Classic example : factorial.
Humorous Asides “A journey begins with single step”
Principles of Programming Chapter 11: Recursive Function  In this chapter, you will learn about  Recursion function 1 NI S1 2009/10.
Searching. The process used to find the location of a target among a list of objects Searching an array finds the index of first element in an array containing.
CS162 - Topic #11 Lecture: Recursion –Problem solving with recursion –Work through examples to get used to the recursive process Programming Project –Any.
CSE 341 Lecture 4 merge sort; basic efficiency issues Ullman slides created by Marty Stepp
Functions-Recall 1. 2 Parameter passing & return void main() { int x=10, y=5; printf (“M1: x = %d, y = %d\n”, x, y); interchange (x, y); printf (“M2:
Lecture 2 Jan Goals: Introduction to recursion Examples of recursive programs Reading: Chapter 1 of the text.
EFFICIENCY & SORTING II CITS Scope of this lecture Quicksort and mergesort Performance comparison.
Merge Sort: Taught By Example CO1406: Algorithms and Data Structures Module Lecturer: Dr. Nearchos Paspallis Week 10 Lab - Practice with Merge sort and.
Lecture 6 Feb 8, 2012 Goals: Linked list (Chapter 3) list class in STL (section 3.3) implementing with linked lists.
Lecture No. 04,05 Sorting.  A process that organizes a collection of data into either ascending or descending order.  Can be used as a first step for.
Chapter 11Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 11 l Basics of Recursion l Programming with Recursion Recursion.
CompSci Review of Recursion with Big-Oh  Recursion is an indispensable tool in a programmer’s toolkit  Allows many complex problems to be solved.
Foundations of Algorithms, Fourth Edition
LINKED LIST’S EXAMPLES Salim Malakouti. Linked List? 523 Pointer Node ValuePointer.
Basic Design Techniques iteration versus recursion divide-and-conquer an example: merge sort.
1 Ch. 2: Getting Started. 2 About this lecture Study a few simple algorithms for sorting – Insertion Sort – Selection Sort (Exercise) – Merge Sort Show.
Question of the Day  What three letter word completes the first word and starts the second one: DON???CAR.
Lecture 13 Oct 15, 2012 cell array (review) Ch 4 recursion (Ch 12)
Recursion COMP x1 Sedgewick Chapter 5. Recursive Functions problems can sometimes be expressed in terms of a simpler instance of the same problem.
Int fact (int n) { If (n == 0) return 1; else return n * fact (n – 1); } 5 void main () { Int Sum; : Sum = fact (5); : } Factorial Program Using Recursion.
Chapter 15 Running Time Analysis. Topics Orders of Magnitude and Big-Oh Notation Running Time Analysis of Algorithms –Counting Statements –Evaluating.
BITS Pilani Pilani Campus Data Structure and Algorithms Design Dr. Maheswari Karthikeyan Lecture3.
Data Structures and Algorithm Analysis Dr. Ken Cosh Linked Lists.
Decrease-and-Conquer Approach
Cs212: DataStructures Computer Science Department Lab 3 : Recursion.
CSE 373 Data Structures and Algorithms
Application: Efficiency of Algorithms II
Application: Efficiency of Algorithms II
CS100A Sections Dec Loop Invariant Review C Review and Example
Presentation transcript:

Lecture 2 Feb 3, 2009 goals: continue recursion more examples of recursive programs

Recursion - rules Rule 1: Provide exit from recursion. (focus on base cases – some times, more than one base case is needed.) Rule 2: Make sure that the successive recursive calls progress towards the base case. Rule 3: Assume that recursive calls work. Rule 4: Compound interest rule: Avoid redundant calls.

Recursion – simple examples 1)Compute n! iter: n! = 1 x 2 … x n = (n – 1)! x n rec: f(n) = n * f(n – 1) 2) Compute … + n rec: f(n) = n + f(n – 1) 3) Compute the n-th Fibonacci number f(n) = f(n – 1) + f(n – 2)

Example: (from Chapter 2 of text) Given x and n, we want to compute x n. Obvious iterative solution: int exp(int x, int n) { int temp = x; for (int j= 1; j < n; ++j) temp*= x; return temp; } The number of multiplications performed is n – 1. We will now see that a recursive algorithm will provide a much faster solution. Faster algorithm is crucial for RSA encryption algorithm.

Idea behind the algorithm Rule of exponents: x n = (x 2 ) n/2 if n is even x * (x 2 ) (n-1)/2 if n is odd base case n = 1  return x even n  call exp(x*x, n/2) and return the result. odd n  call exp(x*x, (n – 1)/2) and multiply the result of call by x and return the output.

Code for recursive exponent algorithm int exp (int x, int n) { if (n == 1) return x; else if (n%2 == 0) return exp(x*x, n/2); else return x* exp(x*x, (n – 1)/2); } Fact: When called to compute exp(x,100000), the iterative algorithm performs multiplications while the recursive algorithm will performs 21 multiplications. Note: The above recursive function is slightly different from the recursive function we presented in the lab.

Recursion involving 1-dim array data Given two segments of sorted arrays A and B, output the result of merging them as a single sorted array. A B merge(A, 2, 3, B, 9, 13) should return merge(A, 2, 2, B, 9,10) should return the array merge(A, 3, 4, B, 9, 8) should return 5 7 since the second array is empty. (high index < low index means the array is empty.)

What are the base cases?

one array segment is empty. In this case, what is the output?

What are the base cases? one array segment is empty. In this case, what is the output? The other array segment, so we just have to copy the segment to the output.

What are the base cases? one (or both) array segment is empty. In this case, what is the output? The other array segment, so we just have to copy the segment to the output. what if both segments are not empty? We need to make recursive call.

Before we proceed, we need to make a change to the prototype of the function merge. Why? We need to add two more parameters - the name of the array and the starting index in the output array at which we want to write.

AB merge(A, 2, 3, B, 9, 13, C, 3) should return C

merge(A, low1,high1, B, low2, high2, C, low) A B merge(A, 9, 13, B, 2, 3, C, 0) Case 1: A[low1] < B[low2] Example: C

merge(A, low1,high1, B, low2, high2, C,low) A B merge(A, 9, 13, B, 2, 3, C, 0) Case 1: A[low1] < B[low2] Example: Step1: move A[low1] to C[low]. Now a recursive call to merge will get the rest of the job done. What call?

merge(A, low1,high1, B, low2, high2) A B merge(A, 9, 13, B, 2, 3) Case 1: A[low1] < B[low2] Example: Step1: move A[low1] to C[low]. Now a recursive call to merge will get the rest of the job done. What call? merge(A, low1+1, high1, B, low2,high2, C, low + 1)

Case 2: A[low1] >= B[low2]. Move B[low2] to C[low] and make a recursive call to merge(A,low1, high1, B, low2+1, high2, C, low+1) The complete code is shown below:

void merge(int A[], int low1, int high1, int B[], int low2,int high2, int C[], int low) { if (high1 < low1) copy(B, low2, high2, C,low); else if (high2 < low2) copy(A, low1, high1, C,low); else if (A[low1] < B[low2]) {C[low] = A[low1]; merge(A,low1+1, high1, B, low2, high2, C,low + 1);} else {C[low] = B[low2]; merge(A,low1, high1, B, low2+1, high2, C,low + 1); } void copy(int A[], int s, int t, int B[], int s1) { for (int j= s; j<= t; ++j) B[s1 +j - s] = A[j]; }

Last example: recursion with a linked list Suppose we want to insert a key x as a last item of a list. a k g c x = ‘b’ a k g c b

void insertLast(Node& head, int k) { // insert k as the last item of the list whose // header is pointed to by head Node* tmp = new Node(k); if (head == 0) head = tmp; else insertLast(head->next, k); }