1 / 22

David Evans cs.virginia/evans

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)

zamir
Download Presentation

David Evans cs.virginia/evans

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Menu • Find Most • Measuring Work • Sorting CS 200 Spring 2004

  3. (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

  4. 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

  5. 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

  6. (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

  7. (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

  8. How much work is find-most? CS 200 Spring 2004

  9. Why not just time it? Moore’s Law: computing power doubles every 18 months! CS 200 Spring 2004

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. (n2) measured times = n2/500 CS 200 Spring 2004

  21. 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

  22. 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

More Related