Presentation is loading. Please wait.

Presentation is loading. Please wait.

David Evans CS200: Computer Science University of Virginia Computer Science Lecture 13: Of On and Off Grounds Sorting.

Similar presentations


Presentation on theme: "David Evans CS200: Computer Science University of Virginia Computer Science Lecture 13: Of On and Off Grounds Sorting."— Presentation transcript:

1 David Evans http://www.cs.virginia.edu/evans CS200: Computer Science University of Virginia Computer Science Lecture 13: Of On and Off Grounds Sorting Coffee Bean Sorting in Guatemala

2 16 February 2004CS 200 Spring 20042 Menu Find Most Measuring Work Sorting

3 16 February 2004CS 200 Spring 20043 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))) (define (insertl lst f stopval) (if (null? lst) stopval (f (car lst) (insertl (cdr lst) f stopval))))

4 16 February 2004CS 200 Spring 20044 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))))

5 16 February 2004CS 200 Spring 20045 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)

6 16 February 2004CS 200 Spring 20046 find-most (define (find-most cf lst) (insertl (lambda (c1 c2) (if (cf c1 c2) c1 c2)) (cdr lst) (car lst))) (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)))

7 16 February 2004CS 200 Spring 20047 (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))

8 16 February 2004CS 200 Spring 20048 How much work is find-most ?

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

10 16 February 2004CS 200 Spring 200410 How much work is find-most? Work to evaluate (find-most f lst)? –Evaluate (insertl (lambda (c1 c2) …) lst) –Evaluate lst –Evaluate (car lst) (define (find-most cf lst) (insertl (lambda (c1 c2) (if (cf c1 c2) c1 c2)) lst (car lst))) These don’t depend on the length of the list, so we don’t care about them.

11 16 February 2004CS 200 Spring 200411 Work to evaluate insertl How many times do we evaluate f for a list of length n ? (define (insertl f lst stopval) (if (null? lst) stopval (f (car lst) (insertl f (cdr lst) stopval)))) 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.)

12 16 February 2004CS 200 Spring 200412 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

13 16 February 2004CS 200 Spring 200413 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)

14 16 February 2004CS 200 Spring 200414 All Sorts (define (sort cf lst) (if (null? lst) lst (let ((most (find-most cf lst))) (cons most (sort cf (delete lst most))))))

15 16 February 2004CS 200 Spring 200415 Caffeine Sorts (define (sort-menu-by-caffeine menu) (sort (lambda (c1 c2) (> (coffee-caffeine-rating c1) (coffee-caffeine-rating c2))) menu))

16 16 February 2004CS 200 Spring 200416 Sorting How much work is sort ? We measure work using orders of growth: How does work grow with problem size? (define (sort cf lst) (if (null? lst) lst (let ((most (find-most cf lst))) (cons most (sort cf (delete lst most)))))) (define (find-most cf lst) (insertl (lambda (c1 c2) (if (cf c1 c2) c1 c2)) lst (car lst)))

17 16 February 2004CS 200 Spring 200417 Sorting 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 ? (define (sort cf lst) (if (null? lst) lst (let ((most (find-most cf lst))) (cons most (sort cf (delete lst most))))))

18 16 February 2004CS 200 Spring 200418 Sorting 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 (define (sort cf lst) (if (null? lst) lst (let ((most (find-most cf lst))) (cons most (sort cf (delete lst most)))))) sort is  ( n 2 ) If we double the length of the list, the amount of work approximately quadruples.

19 16 February 2004CS 200 Spring 200419 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

20 16 February 2004CS 200 Spring 200420 (n2)(n2) = n 2 /500 measured times

21 16 February 2004CS 200 Spring 200421 Is our sort good enough? Takes over 1 second to sort 1000-length list. How long would it take to sort 1 million items? (n2)(n2) 1s = time to sort 1000 4s ~ time to sort 2000 1M is 1000 * 1000 Sorting time is n 2 so, sorting 1000 times as many items will take 1000 2 times as long = 1 million seconds ~ 11 days Note: there are 800 Million VISA cards in circulation. It would take 20,000 years to process a VISA transaction at this rate.

22 16 February 2004CS 200 Spring 200422 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  (n 2 ) –How does it relate to grade inflation


Download ppt "David Evans CS200: Computer Science University of Virginia Computer Science Lecture 13: Of On and Off Grounds Sorting."

Similar presentations


Ads by Google