22
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

David Evans cs.virginia/evans

  • Upload
    zamir

  • View
    23

  • Download
    0

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

Page 1: David Evans cs.virginia/evans

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

Page 2: David Evans cs.virginia/evans

16 February 2004 CS 200 Spring 2004 2

Menu

• Find Most

• Measuring Work

• Sorting

Page 3: David Evans cs.virginia/evans

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))))

Page 4: David Evans cs.virginia/evans

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))))

Page 5: David Evans cs.virginia/evans

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)

Page 6: David Evans cs.virginia/evans

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)))

Page 7: David Evans cs.virginia/evans

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))

Page 8: David Evans cs.virginia/evans

16 February 2004 CS 200 Spring 2004 8

How much work is find-most?

Page 9: David Evans cs.virginia/evans

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!

Page 10: David Evans cs.virginia/evans

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.

Page 11: David Evans cs.virginia/evans

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

Page 12: David Evans cs.virginia/evans

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

Page 13: David Evans cs.virginia/evans

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)

Page 14: David Evans cs.virginia/evans

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))))))

Page 15: David Evans cs.virginia/evans

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))

Page 16: David Evans cs.virginia/evans

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)))

Page 17: David Evans cs.virginia/evans

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))))))

Page 18: David Evans cs.virginia/evans

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.

Page 19: David Evans cs.virginia/evans

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

Page 20: David Evans cs.virginia/evans

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

Page 21: David Evans cs.virginia/evans

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.

Page 22: David Evans cs.virginia/evans

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