220 likes | 324 Vues
Lecture 13: Of On and Off Grounds Sorting. David Evans http://www.cs.virginia.edu/evans. Coffee Bean Sorting in Guatemala. CS200: Computer Science University of Virginia Computer Science. Menu. Find Most Measuring Work Sorting. (define (insertl lst f stopval) (if (null? lst)
E N D
Lecture 13: Of On and Off Grounds Sorting David Evans http://www.cs.virginia.edu/evans Coffee Bean Sorting in Guatemala CS200: Computer Science University of Virginia Computer Science
Menu • Find Most • Measuring Work • Sorting CS 200 Spring 2004
(define (insertl lst f stopval) (if (null? lst) stopval (f (car lst) (insertl (cdr lst) f stopval)))) find-most-caffeinated (define (find-most-caffeinated menu) (insertl (lambda (c1 c2) (if (> (coffee-caffeine-rating c1) (coffee-caffeine-rating c2)) c1 c2)) (cdr menu) ;; already used the car as stopval (car menu))) CS 200 Spring 2004
find-most-caffeinated (define (find-most-caff menu) (if (null? (cdr menu)) (car menu) (let ((rest-most-caff (find-most-caff (cdr menu)))) (if (> (coffee-caffeine-rating (car menu)) (coffee-caffeine-rating rest-most caff)) (car menu) rest-most-caff)))) CS 200 Spring 2004
Comparing Processes > (trace >) (>) > (find-most-caff todays-menu) |(> 15 57) |#f |(> 12 57) |#f |(> 92 57) |#t |(> 85 92) |#f ("BEN'S Expresso Noir Supreme" 17.23 . 92) > (find-most-caffeinated todays-menu) |(> 15 57) |#f |(> 12 57) |#f |(> 92 57) |#t |(> 85 92) |#f ("BEN'S Expresso Noir Supreme" 17.23 . 92) CS 200 Spring 2004
(define (find-most-caffeinated menu) (insertl (lambda (c1 c2) (if (> (coffee-caffeine-rating c1) (coffee-caffeine-rating c2)) c1 c2)) (cdr menu) ;; already used the car as stopval (car menu))) find-most (define (find-most cf lst) (insertl (lambda (c1 c2) (if (cf c1 c2) c1 c2)) (cdr lst) (car lst))) CS 200 Spring 2004
(define (find-most cf lst) (insertl (lambda (c1 c2) (if (cf c1 c2) c1 c2)) (cdr lst) (car lst))) (define (find-most-caffeinated menu) (find-most (lambda (c1 c2) (> (coffee-caffeine-rating c1) (coffee-caffeine-rating c2))) menu)) CS 200 Spring 2004
How much work is find-most? CS 200 Spring 2004
Why not just time it? Moore’s Law: computing power doubles every 18 months! CS 200 Spring 2004
These don’t depend on the length of the list, so we don’t care about them. How much work is find-most? (define (find-most cf lst) (insertl (lambda (c1 c2) (if (cf c1 c2) c1 c2)) lst (car lst))) • Work to evaluate (find-most f lst)? • Evaluate (insertl (lambda (c1 c2) …) lst) • Evaluate lst • Evaluate (car lst) CS 200 Spring 2004
Work to evaluate insertl (define (insertl f lst stopval) (if (null? lst) stopval (f (car lst) (insertl f (cdr lst) stopval)))) • How many times do we evaluate f for a list of length n? n insertl is (n) “Theta n” If we double the length of the list, we amount of work required approximately doubles. (We will see a more formal definition of next week.) CS 200 Spring 2004
Simple Sorting • We know how to find-most-caffeinated • How do we sort list by caffeine rating? • Use (find-most-caffeinated menu) to find the most caffeinated • Remove it from the menu • Repeat until the menu is empty CS 200 Spring 2004
sort-menu (define (sort-menu menu) (if (null? menu) menu (let ((most-caff (find-most-caffeinated menu))) (cons most-caff (sort-menu (delete menu most-caff)))))) How can we generalize this? (e.g., sort by price also) CS 200 Spring 2004
All Sorts (define (sort cf lst) (if (null? lst) lst (let ((most (find-most cf lst))) (cons most (sort cf (delete lst most)))))) CS 200 Spring 2004
Caffeine Sorts (define (sort-menu-by-caffeine menu) (sort (lambda (c1 c2) (> (coffee-caffeine-rating c1) (coffee-caffeine-rating c2))) menu)) CS 200 Spring 2004
Sorting (define (find-most cf lst) (insertl (lambda (c1 c2) (if (cf c1 c2) c1 c2)) lst (car lst))) (define (sort cf lst) (if (null? lst) lst (let ((most (find-most cf lst))) (cons most (sort cf (delete lst most)))))) • How much work is sort? • We measure work using orders of growth:How does work grow with problem size? CS 200 Spring 2004
Sorting (define (sort cf lst) (if (null? lst) lst (let ((most (find-most cf lst))) (cons most (sort cf (delete lst most)))))) • What grows? • n = the number of elements in lst • How much work are the pieces? find-most is (n) delete is (n) • How many times does sort evaluate find-most and delete? CS 200 Spring 2004
Sorting (define (sort cf lst) (if (null? lst) lst (let ((most (find-most cf lst))) (cons most (sort cf (delete lst most)))))) • n = the number of elements in lst • find-most is (n) delete is (n) • How many times does sort evaluate find-most and delete? n sort is (n2) If we double the length of the list, the amount of work approximately quadruples. CS 200 Spring 2004
Timing Sort > (time (sort < (revintsto 100))) cpu time: 20 real time: 20 gc time: 0 > (time (sort < (revintsto 200))) cpu time: 80 real time: 80 gc time: 0 > (time (sort < (revintsto 400))) cpu time: 311 real time: 311 gc time: 0 > (time (sort < (revintsto 800))) cpu time: 1362 real time: 1362 gc time: 0 > (time (sort < (revintsto 1600))) cpu time: 6650 real time: 6650 gc time: 0 CS 200 Spring 2004
(n2) measured times = n2/500 CS 200 Spring 2004
Is our sort good enough? Takes over 1 second to sort 1000-length list. How long would it take to sort 1 million items? 1s = time to sort 1000 4s ~ time to sort 2000 1M is 1000 * 1000 Sorting time is n2 so, sorting 1000 times as many items will take 10002 times as long = 1 million seconds ~ 11 days (n2) Note: there are 800 Million VISA cards in circulation. It would take 20,000 years to process a VISA transaction at this rate. CS 200 Spring 2004
Charge • Exam review in class Wednesday • Look over the practice exams from previous years before Wednesday • Exam 1 out Friday, due next Monday • Next Monday: faster ways of sorting • Read Tyson’s essay (before next Weds) • How does it relate to (n2) • How does it relate to grade inflation CS 200 Spring 2004