220 likes | 326 Views
Explore the efficient caffeine sorting algorithm taught in a Computer Science lecture at the University of Virginia using a Java function called 'find-most-caffeinated'. Understand the principles behind sorting coffee beans by caffeine content. Discover how to evaluate the 'find-most' function and its work complexity. Generalize the sorting method by applying it to various criteria like price. Learn about different sorting techniques and orders of growth. Measure the performance of the sorting algorithm through timing trials.
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