Linear Search CS 5010 Program Design Paradigms “Bootcamp” Lesson 9.1 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.:

Slides:



Advertisements
Similar presentations
When do I need an invariant? CS 5010 Program Design Paradigms “Bootcamp” Lesson 7.4 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Advertisements

Depth-First and Breadth-First Search CS 5010 Program Design Paradigms “Bootcamp” Lesson 9.2 TexPoint fonts used in EMF. Read the TexPoint manual before.
Binary Search CS 5010 Program Design Paradigms “Bootcamp” Lesson 8.3 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.:
Sometimes Structural Recursion Isn't Enough CS 5010 Program Design Paradigms “Bootcamp” Lesson 8.1 TexPoint fonts used in EMF. Read the TexPoint manual.
Lists vs. Structures CS 5010 Program Design Paradigms “Bootcamp” Lesson 6.1 © Mitchell Wand, This work is licensed under a Creative Commons Attribution-NonCommercial.
Foldr and Foldl CS 5010 Program Design Paradigms “Bootcamp” Lesson 7.5 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.:
Basics of Inheritance CS 5010 Program Design Paradigms "Bootcamp" Lesson 12.1 © Mitchell Wand, This work is licensed under a Creative Commons.
The Function Design Recipe CS 5010 Program Design Paradigms “Bootcamp” Lesson 1.1 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Midterm Review CS 5010 Program Design Paradigms “Bootcamp” Lesson 9.4 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.:
Classes, Objects, and Methods CS 5010 Program Design Paradigms "Bootcamp" Lesson 10.1 © Mitchell Wand, This work is licensed under a Creative.
Multi-way Trees CS 5010 Program Design Paradigms “Bootcamp” Lesson 6.6 © Mitchell Wand, This work is licensed under a Creative Commons Attribution-NonCommercial.
Lists CS 5010 Program Design Paradigms “Bootcamp” Lesson 4.1 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA 1 ©
Case Study: Free Variables CS 5010 Program Design Paradigms “Bootcamp” Lesson 7.3 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Ormap, andmap, and filter CS 5010 Program Design Paradigms “Bootcamp” Lesson 5.3 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Rewriting your function using map and foldr CS 5010 Program Design Paradigms “Bootcamp” Lesson 5.5 TexPoint fonts used in EMF. Read the TexPoint manual.
Structural Decomposition CS 5010 Program Design Paradigms “Bootcamp” Lesson 2.1 © Mitchell Wand, This work is licensed under a Creative Commons.
Introducing General Recursion CS 5010 Program Design Paradigms “Bootcamp” Lesson 8.2 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Searching in a Graph CS 5010 Program Design Paradigms “Bootcamp” Lesson 8.4 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this.
Mutually-Recursive Data Definitions CS 5010 Program Design Paradigms “Bootcamp” Lesson 6.4 © Mitchell Wand, This work is licensed under a Creative.
Foldr CS 5010 Program Design Paradigms “Bootcamp” Lesson 5.4 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA © Mitchell.
Patterns of Communication Between Objects CS 5010 Program Design Paradigms "Bootcamp" Lesson 11.1 © Mitchell Wand, This work is licensed under.
Solving Your Problem by Generalization CS 5010 Program Design Paradigms “Bootcamp” Lesson 7.1 © Mitchell Wand, This work is licensed under a.
Invariants and Performance CS 5010 Program Design Paradigms “Bootcamp” Lesson 7.6 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
The Function Design Recipe CS 5010 Program Design Paradigms “Bootcamp” Lesson 1.1 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
The Design Recipe using Classes CS 5010 Program Design Paradigms "Bootcamp" Lesson 10.5 © Mitchell Wand, This work is licensed under a Creative.
The Point of This Course CS 5010 Program Design Paradigms “Bootcamp” Lesson 0.1 © Mitchell Wand, This work is licensed under a Creative Commons.
Generalizing Similar Functions CS 5010 Program Design Paradigms “Bootcamp” Lesson 5.1 TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Rewriting your function using map and foldr CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual.
Case Study: Free Variables CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Invariants and Performance CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
More examples of invariants CS 5010 Program Design Paradigms “Bootcamp” Lesson © Mitchell Wand, This work is licensed under a Creative.
Generalizing Over Functions CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Lists of Structures CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete this.
The 8-queens problem CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete this.
Testing Objects CS 5010 Program Design Paradigms "Bootcamp" Lesson © Mitchell Wand, This work is licensed under a Creative Commons Attribution-NonCommercial.
Searching in a Graph CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete this.
Solving Your Problem by Generalization CS 5010 Program Design Paradigms “Bootcamp” Lesson 7.1 © Mitchell Wand, This work is licensed under a.
Lists vs. Structures CS 5010 Program Design Paradigms “Bootcamp” Lesson © Mitchell Wand, This work is licensed under a Creative Commons.
Organization of This Course CS 5010 Program Design Paradigms “Bootcamp” Lesson 0.2 © Mitchell Wand, This work is licensed under a Creative Commons.
Linear Search CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.:
Halting Measures and Termination Arguments CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual.
Non-Empty Lists CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.:
Using the List Template CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete.
Using the List Template CS 5010 Program Design Paradigms “Bootcamp” Lesson 4.2 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this.
Sometimes Structural Recursion Isn't Enough CS 5010 Program Design Paradigms “Bootcamp” Lesson 8.1 TexPoint fonts used in EMF. Read the TexPoint manual.
More linear search with invariants CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before.
Midterm Review CS 5010 Program Design Paradigms “Bootcamp” Lesson TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.:
Solving Your Problem by Generalization CS 5010 Program Design Paradigms “Bootcamp” Lesson © Mitchell Wand, This work is licensed under.
Classes, Objects, and Interfaces CS 5010 Program Design Paradigms "Bootcamp" Lesson © Mitchell Wand, This work is licensed under a Creative.
Generalizing Similar Functions
More About Recursive Data Types
More Recursive Data Types
CS 5010 Program Design Paradigms “Bootcamp” Lesson 8.7
Halting Functions for Tree-Like Structures
CS 5010 Program Design Paradigms “Bootcamp” Lesson 4.1
CS 5010 Program Design Paradigms “Bootcamp” Lesson 3.4
Case Study: Undefined Variables
CS 5010 Program Design Paradigms “Bootcamp” Lesson 7.5
Solving Your Problem by Generalization
CS 5010 Program Design Paradigms “Bootcamp” Lesson 6.5
More examples of invariants
ormap, andmap, and filter
Generalizing Similar Functions
Rewriting your function using map and foldr
CS 5010 Program Design Paradigms “Bootcamp” Lesson 4.1
When do I need an invariant?
CS 5010 Program Design Paradigms “Bootcamp” Lesson 8.3
Presentation transcript:

Linear Search CS 5010 Program Design Paradigms “Bootcamp” Lesson 9.1 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA © Mitchell Wand, This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License. Creative Commons Attribution-NonCommercial 4.0 International License 1

Module Outline This week, we'll show some more applications of general recursion + invariants. We'll look at – linear search – integer square root – more graph-searching – the N-queens problem Then we’ll have a review of design strategies 2

Generalization Over Constants Over Expressions Over Contexts Over Data Representations Over Method Implementations Mixed Data Data Representations Basics Recursive Data Functional Data Objects & Classes Stateful Objects Design Strategies Function Composition Structural Decomposition Generalization General Recursion Communication via State Module 09 3

Introduction Many problems involve searching General recursion is well-suited to search problems. In this lesson, we'll talk about a simple case: linear search 4

Learning Objectives At the end of this lesson you should be able to: – Recognize problems for which a linear search abstraction is appropriate. – Use general recursion and invariants to solve problems involving numbers 5

Example: function-sum function-sum : Nat Nat (Nat -> Number) -> Number GIVEN: natural numbers lo <= hi and a function f, RETURNS: SUM{f(j) | lo <= j <= hi} 6

Examples/Tests (begin-for-test (check-equal? (function-sum 1 3 (lambda (j) j)) ( )) (check-equal? (function-sum 1 3 (lambda (j) (+ j 10))) ( ))) 7

Let's generalize As we compute, we will have computed the sum of some of the values. Let's call that sum sofar. lohi sofar contains the sum of the f(j) for j in this region 8

Representing this picture as data lohi sofar contains the sum of the f(j) for j in this region i We can represent this picture with 4 numbers: lo i, which is the first value of j to right of the boundary hi, and sofar, which is the sum of the f(j) for j in the brown region So what we want to compute is sofar + SUM{f(j)|i <= j <= hi} This is a function of i, hi, sofar, and f. 9

Contract, Purpose Statement, and Examples ;; generalized-function-sum : ;; Nat Nat Number (Nat -> Number) -> Number ;; GIVEN: natural numbers i and hi, a number sofar, ;; and a function f, ;; WHERE: i <= hi ;; RETURNS: sofar + SUM{f(j) | i <= j <= hi} ;; EXAMPLES/TESTS: (begin-for-test (check-equal? (generalized-function-sum (lambda (j) j)) (+ 17 ( ))) (check-equal? (generalized-function-sum (lambda (j) (+ j 10))) (+ 42 ( )))) 10

What do we know about this function? if i = hi, then (generalized-function-sum i hi sofar f) = sofar + SUM{f(j)|i <= j <= hi} = sofar + SUM{f(j)|hi <= j <= hi} = (+ sofar (f hi)) = (+ sofar (f i)) 11

What else do we know about this function? if i < hi, then (generalized-function-sum i hi sofar f) = sofar + SUM{f(j)|i <= j <= hi} = (sofar + f(i)) + SUM{f(j)|i+1 <= j <= hi} = (generalized-function-sum (+ i 1) hi (+ sofar (f i)) f) take (f i) out of the SUM 12

So now we can write the function definition ;; STRATEGY: General Recursion (define (generalized-function-sum i hi sofar f) (cond [(= i hi) (+ sofar (f i))] [else (generalized-function-sum (+ i 1) hi (+ sofar (f i)) f)])) 13

What happens at the recursive call? sofar contains the sum of the f(j) for j in this region lohii i lohi lohii The shaded region expands by one 14

What's the halting measure? The invariant tells us that i <= hi i increases at every call So (hi – i) is a non-negative, always decreasing quantity. So it's a halting measure. 15

We still need our original function ;; function-sum : ;; Nat Nat (Nat -> Number) -> Number ;; GIVEN: natural numbers lo and hi, and a ;; function f ;; WHERE: lo <= hi ;; RETURNS: SUM{f(j) | lo <= j <= hi} ;; STRATEGY: function composition (define (function-sum lo hi f) (generalized-function-sum lo hi 0 f)) Just call generalized-function-sum with sofar = 0. 16

Example: Linear Search ;; linear-search : Nat Nat (Nat -> Bool) -> MaybeNat ;; GIVEN: 2 natural numbers lo and hi, ;; and a predicate pred ;; WHERE: lo <= hi ;; RETURNS: the smallest number in [lo,hi) that satisfies ;; pred, or false if there is none. ;; EXAMPLES/TESTS (begin-for-test (check-equal? (linear-search 7 11 even?) 8) (check-false (linear-search 2 4 (lambda (n) (> n 6))))) ;; STRATEGY: General Recursion Remember, this means the half- open interval: { j | lo <= j < hi} 17

What are the trivial cases? if (= lo hi), then [lo,hi) is empty, so the answer is false. if (pred lo) is true, then lo is the smallest number in [lo,hi) that satisfies pred. 18

What have we got so far? (define (linear-search lo hi pred) (cond [(= lo hi) false] [(pred lo) lo] [else ???])) 19

What's the non trivial case? If (< lo hi) and (pred lo) is false, then the smallest number in [lo,hi) that satisfies pred (if it exists) must be in [lo+1, hi). So, if (< lo hi) and (pred lo) is false, then (linear-search lo hi pred) = (linear-search (+ lo 1) hi pred) 20

Function Definition (define (linear-search lo hi pred) (cond [(= lo hi) false] [(pred lo) lo] [else (linear-search (+ lo 1) hi pred)])) 21

What's the halting measure? The invariant tells us that lo <= hi, so (- hi lo) is a non-negative integer. lo increases at every recursive call, so (- hi lo) decreases. So (- hi lo) is our halting measure. 22

Another example: Integer Square Root int-sqrt : Nat -> Nat GIVEN: n, RETURNS: z such that z² ≤ n < (z+1)² examples: (int-sqrt 25) = 5 (int-sqrt 26) = 5... (int-sqrt 35) = 5 (int-sqrt 36) = 6 This is one of my favorite examples. 23

Video Demonstration Watch the video demonstration at vUApE vUApE Note: the video is a little out of date: – it talks about accumulators instead of context arguments – the purpose statements are not always up to our current coding standards – sorry about that. Below are the slides from the video, slightly updated. 24

int-sqrt.v0 ;; STRATEGY: HOFC (define (int-sqrt.v0 n) (linear-search 0 n (lambda (z) (< n (* (+ z 1) (+ z 1)))))) 25

int-sqrt.v1 (define (int-sqrt.v1 n) (local ((define (helper z) ;; PURPOSE: Returns int-sqrt(n) ;; WHERE z² ≤ n ;; HALTING MEASURE (- n z) (cond [(< n (sqr (+ z 1))) z] [else (helper (+ z 1))]))) (helper 0))) invariant guarantees that the halting measure is non- negative we just checked that (z+1)² ≤ n, so calling helper with z+1 satisfies the invariant. 26

A picture of this invariant 0Nz INVARIANT: z² ≤ n all these numbers also have squares that are ≤ n 27

What happens at the recursive call? 0Nz INVARIANT: z² ≤ n all these numbers also have squares that are ≤ n CONDITION: (z+1)² ≤ n 0Nz_new = z+1 0Nz INVARIANT z² ≤ n: true again for the new value of z. 28

Improving this code Don't like to do sqr at every step, so let's keep the value of (sqr (+ z 1)) in a context argument, which we'll call u. Compute new value of u as follows: z' = (z+1) u' = (z'+1)*(z'+1) = ((z+1)+1)*((z+1)+1) = (z+1)² + 2(z+1) + 1 = u + 2z

Function Definition (define (int-sqrt.v2 n) (local ((define (helper z u) ;; PURPOSE: Returns int-sqrt(n) ;; WHERE z² <= n ;; AND u = (z+1)² ;; HALTING MEASURE (- n z) (cond [(< n u) z] [else (helper (+ 1 z) (+ u (* 2 z) 3))]))) (helper 0 1))) the helper finds the answer for the whole function update context argument to maintain invariant initialize context argument to make invariant true u = (z+1)² 30

Let's do it one more time Add invariant: v = 2*z+3 z' = z+1 v' = 2*z'+ 3 = 2*(z+1) + 3 = 2*z = (2*z + 3) + 2 = v

Function Definition (define (int-sqrt.v3 n) (local ((define (helper z u v) ;; PURPOSE: Returns int-sqrt(n) ;; WHERE z^2 <= n ;; AND u = (z+1)^2 ;; AND v = 2*z+3 ;; HALTING MEASURE (- n z) (cond [(< n u) z] [else (helper (+ 1 z) (+ u v) (+ v 2))]))) (helper 0 1 3))) v = 2z+3 u = (z+1)² You could never understand this program if I hadn't written down the invariants! 32

Summary We've seen how generative recursion can deal with problems involving numerical values We've seen how context arguments and invariants can help avoid recalculating expensive values We've seen how invariants can be an invaluable aid in understanding programs 33

Learning Objectives At the end of this lesson you should be able to: – Recognize problems for which a linear search abstraction is appropriate. – Use general recursion and invariants to solve problems involving numbers 34

Next Steps If you have questions about this lesson, ask them on the Discussion Board Go on to the next lesson 35