Upload
zamir
View
23
Download
0
Tags:
Embed Size (px)
DESCRIPTION
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) - PowerPoint PPT Presentation
Citation preview
David Evanshttp://www.cs.virginia.edu/evans
CS200: Computer ScienceUniversity of VirginiaComputer Science
Lecture 13: Of On and Off Grounds Sorting
Coffee Bean Sorting in Guatemala
16 February 2004 CS 200 Spring 2004 2
Menu
• Find Most
• Measuring Work
• Sorting
16 February 2004 CS 200 Spring 2004 3
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))))
16 February 2004 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))))
16 February 2004 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)
16 February 2004 CS 200 Spring 2004 6
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)))
16 February 2004 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))
16 February 2004 CS 200 Spring 2004 8
How much work is find-most?
16 February 2004 CS 200 Spring 2004 9
Why not just time it?
0
500000
1000000
1500000
2000000
2500000
3000000
3500000
4000000
45000001969
1971
1972
1974
1975
1977
1978
1980
1981
1983
1984
1986
1987
1989
1990
1992
1993
1995
1996
1998
1999
2001
2002
Moore’s Law: computing power doubles every 18 months!
16 February 2004 CS 200 Spring 2004 10
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.
16 February 2004 CS 200 Spring 2004 11
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))))
ninsertl 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.)
16 February 2004 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
16 February 2004 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)
16 February 2004 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))))))
16 February 2004 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))
16 February 2004 CS 200 Spring 2004 16
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)))
16 February 2004 CS 200 Spring 2004 17
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))))))
16 February 2004 CS 200 Spring 2004 18
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 (n2)If we double the length of the list, the amount of work approximately quadruples.
16 February 2004 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
16 February 2004 CS 200 Spring 2004 20
(n2)
0
5000
10000
15000
20000
25000
30000
35000
0 1000 2000 3000
= n2/500
measured times
16 February 2004 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?
(n2)1s = time to sort 10004s ~ 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
Note: there are 800 Million VISA cards in circulation.It would take 20,000 years to process a VISA transaction at this rate.
16 February 2004 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