# EECS 311: Chapter 2 Notes Chris Riesbeck EECS Northwestern

Post on 01-Apr-2015

216 views

Embed Size (px)

TRANSCRIPT

<ul><li>Slide 1</li></ul>
<p>EECS 311: Chapter 2 Notes Chris Riesbeck EECS Northwestern Slide 2 Unless otherwise noted, all tables, graphs and code from Mark Allen Weiss' Data Structures and Algorithm Analysis in C++, 3 rd ed, copyright 2006 by Pearson Education, Inc. Slide 3 Maximal Subsequence Sum Problem Given a sequence of N positive and negative integers A 1, A 2, A 3, , A n Find the subsequence A j, Ak with the largest sum Example: -2, 11, -4, 13, -5, -2 6591320 Slide 4 Triple-Loop Algorithm For every start point For every end point Add up the subsequence Save the biggest Slide 5 Algorithm 1 Run-Times Slide 6 Double-Loop Algorithm For every start point For every end point New sum is old sum + next item Save the biggest Slide 7 Algorithm 2 Run-Times Slide 8 Divide and Conquer Algorithm Sum for 1 element subsequence Sums for max subsequences in left and right halves Sum for max left subsequence ending on center Sum for max right subsequence starting right of center Return largest of the 3 sums Slide 9 Analysis of Algorithm 3 To derive T(N), time to solve a problem with N items Base case T(1) = O(1) Recursive case T(N) = 2T(N/2) + O(N) + O(1) Slide 10 Analyzing Divide and Conquer T(1) = O(1) T(N) = 2T(N/2) + N T(2) = 2T(1) + 2 = 4 = 2*2 T(4) = 2T(2) + 4 = 12 = 4*3 T(8) = 2T(4) + 8 = 32 = 8*4 T(16) = 2T(8) + 16 = 80 = 16*5 T(2 k ) = 2 k * (k+1) For general N, O(N log N) Slide 11 Algorithm 3 Run-Times Slide 12 Single-Loop Algorithm For every start point New sum is old sum + next item If bigger, save; if negative, forget and start over Slide 13 Algorithm 4 Run-Times Slide 14 Algorithmic Analysis Slide 15 Run-times for small N Slide 16 Run-times for large N Slide 17 Typical Growth Rates Don't confuse with log log N which is < log N Slide 18 Binary Search Does this algorithm always stop? If it does, does it always return the right answer? If it does, how long does it take, in the worst case? Slide 19 Does it halt? Find a measure M such that you can prove it monotonically decrease on every iteration the algorithm halts when M passes some threshold, e.g., 0 Binary search example: M = high low M decreases by at least 1 every iteration algorithm halts when M < 0 Slide 20 Does it give the right answer? Proof by cases When it returns a value, is it correct (no false positives)? When it returns not found, is it correct (no false negatives)? Slide 21 When it returns a value, is it correct ? Proof by contradiction: Assume desired property is false. Prove contradiction results. Binary search example: Assume k -1 is returned and a[k] x. k is returned on line 19. This means a[k] is neither > nor < than x. a[k] must be or =. Contradiction. Slide 22 When it returns not found, is it correct ? Proof by induction: Prove P is true for K, typically 1 or 2 Prove P is true for N+1 if its true for N Then P is true for all N K Binary search example: Assume x not in a[]. Assume a[] has 1 element. a[0] x and code correctly returns not found. Assume a[] has N + 1 elements. Proof by cases: If a[mid] < x, search will look at a[mid] a[high], which has less than N elements. By assumption, that search returns correct answer. Similarly if a[mid] > x. Ergo, binary search returns not found correctly for all N 1 Slide 23 Greatest Common Divisor Does this algorithm always stop? If it does, does it always return the right answer? If it does, how long does it take, in the worst case? Slide 24 Exponentiation Does this algorithm always stop? If it does, does it always return the right answer? If it does, how long does it take, in the worst case? Slide 25 1) { cout</p>

Recommended

View more >