CSE 115 / ENGR 160 Spring 2015 Lecture 23 Announcements and Assignments • • • • Check course website for reading schedule HW #10 due today in class Quiz #3 today in latter part of lecture HW #11 assigned today, due Wed. May 6 in class Today • 5.4 Recursive Algorithms (continued) • 6.1 The Basics of Counting Recursive GCD Algorithm Example: Give a recursive algorithm for computing the greatest common divisor of two nonnegative integers a and b with a < b. Solution: Use the reduction gcd(a,b) = gcd(b mod a, a) and the condition gcd( ,b) = b when b > . procedure gcd(a,b: nonnegative integers with a < b) if a = else gcd (b mod a, a) {output is gcd(a, b)} 79 Recursive Modular Exponentiation Algorithm Example: Devise a recursive algorithm for computing bn mod m, where b, n, and m are integers with m n and b m. Solution: (see text for full explanation) procedure mpower(b,n,m: integers with b > 0 and m 2,n 0 if n = 0 then return1 else if n is even then returnmpower(b,n/2,m 2 mod m else return(mpower(b, n/2 ,m 2 mod m∙b mod m) mod m {output is bn mod m} 80 Recursive Binary Search Algorithm Example: Construct a recursive version of a binary search algorithm. Solution: Assume we have a1,a2,…, an, an increasing sequence of integers. Initially i is and j is n. We are searching for x. procedure binary search(i, j, x : integers, 1 i j n m : i j /2 if x = am then returnm else if (x < am and i < m) then returnbinary search(i,m 1,x else if (x > am and j >m) then returnbinary search(m 1,j,x else return0 {output is location of x in a1,a2,…,an if it appears, otherwise 0} 81 Proving Recursive Algorithms Correct Both mathematical and str0ng induction are useful techniques to show that recursive algorithms always produce the correct output. Example: Prove that the algorithm for computing the powers of real numbers is correct. procedure power(a:nonzero real number, n: nonnegative integer) if n = 0 then return1 else returna∙power (a, n 1) {output is an} 82 Proving Recursive Algorithms Correct 2 Solution: Use mathematical induction on the exponent n. BASIS STEP: a0 = for every nonzero real number a, and power(a, ) = . INDUCTIVE STEP: The inductive hypothesis is that . Assuming the inductive power(a,k) = ak, for all a hypothesis, the algorithm correctly computes ak+1, since power(a,k + ) = a power (a, k) = a ak = ak+1 . 83 . procedure power(a:nonzero real number, n: nonnegative integer) if n = 0 then return1 else returna∙power (a, n 1) {output is an} Merge Sort Merge Sort works by iteratively splitting a list (with an even number of elements) into two sublists of equal length until each sublist has one element. Each sublist is represented by a balanced binary tree. At each step a pair of sublists is successively merged into a list with the elements in increasing order. The process ends when all the sublists have been merged. The succession of merged lists is represented by a binary tree. 84 Merge Sort Example: Use merge sort to put the list into increasing order. Solution: 85 Recursive Merge Sort Example: Construct a recursive merge sort algorithm. Solution: Begin with the list of n elements L. procedure mergesort(L = a1 a2 an if n > m L1 := a1 a2 am L2 := am 1 am 2 an L := merge(mergesort(L1), mergesort(L2 )) {L is now sorted in increasing order} continued → 86 Recursive Merge Sort Subroutine merge, which merges two sorted lists. procedure merge(L1, L2 :sorted lists L := empty list while L1 and L2 are both nonempty remove smaller of first elements of L1 and L2 from its list; put at the right end of L if this removal makes one list empty then remove all elements from the other list and append them to L return L {L is the merged list in increasing order} Complexity of Merge: Two sorted lists with m elements and n elements can be merged into a sorted list using no more than m + n comparisons. 87 Merging Two Lists Example: Merge the two lists Solution: and . 88 Complexity of Merge Sort Complexity of Merge Sort: The number of comparisons needed to merge a list with n elements is O(n log n). For simplicity, assume that n is a power of , say m. At the end of the splitting process, we have a binary tree with m levels, and m lists with one element at level m. The merging process begins at level m with the pairs of m lists with one element combined into m 1 lists of two elements. Each merger takes one comparison. The procedure continues, at each level (k = m, m k lists with m k elements are merged into m k 1 lists, with m k 1 elements at level k . We know (by the complexity of the merge subroutine) that each merger takes at most 2m comparisons. k + 2m k 1 2m k 1 1 continued → 89 Complexity of Merge Sort Summing over the number of comparisons at each level, shows that because m = log n and n = m. (The expression in the formula above is evaluated as m using the formula for the sum of the terms of a geometric progression, from Section .) Chapter that the fastest comparison‐based sorting algorithms have O(n log n) time complexity. So, merge sort achieves the best possible big‐O estimate of time complexity. 90 Chapter 6 With Question/Answer Animations 1 Chapter Summary The Basics of Counting The Pigeonhole Principle Permutations and Combinations 2 Section . 3 Section Summary The Product Rule The Sum Rule The Subtraction Rule The Division Rule Examples, Examples, and Examples Tree Diagrams 4 Basic Counting Principles: The Product Rule The Product Rule: A procedure can be broken down into a sequence of two tasks. There are n1 ways to do the first task and n2 ways to do the second task. Then there are n1∙n2 ways to do the procedure. Example: How many bit strings of length seven are there? Solution: Since each of the seven bits is either a or a , the answer is 7 = . 5 The Product Rule Example: How many different license plates can be made if each plate contains a sequence of three uppercase English letters followed by three digits? Solution: By the product rule, 6 Counting Functions Counting Functions: How many functions are there from a set with m elements to a set with n elements? Solution: Since a function represents a choice of one of the n elements of the codomain for each of the m elements in the domain, the product rule tells us that there are n n n nm such functions. Counting One‐to‐One Functions: How many one‐to‐one functions are there from a set with m elements to one with n elements? Solution: Suppose the elements in the domain are a1, a2,…, am. There are n ways to choose the value of a1and ways to choose a2, etc. The product rule tells us that n there are n(n (n n m 7 Telephone Numbering Plan Example: The North American numbering plan specifies that a telephone number consists of 10 digits: a 3‐digit area code, a 3‐digit office code, and a 4‐digit station code. There are some restrictions on the digits. Let X denote a digit from 0 through 9. Let N denote a digit from 2 through 9. Let Y denote a digit that is 0 or 1. In the old plan (in use in the 1960s) the format was NYX‐NNX‐XXXX. In the new plan, the format is NXX‐NXX‐XXXX. How many different #s are possible under the old and new plans? Solution: Use the Product Rule. There are 8∙2∙10= 160 area codes with the format NYX. There are 8∙10∙10= 800 area codes with the format NXX. There are 8∙8∙10= 640 office codes with the format NNX. There are 10∙10∙10∙10= 10,000 station codes with the format XXXX. Number of old plan telephone numbers: 160∙640∙10,000= 1,024,000,000. Number of new plan telephone numbers: 800∙800∙10,000= 6,400,000,000. 8
© Copyright 2024