* distribution of total weighted average so far (with 40% of grade determined): |

- Final2: Neal (2,5), Anna (?), Lan (?), Wojtek (?)
- Final1: Neal (2,6), Anna (?), Lan (?), Wojtek (?)
- Prog6: Wojtek
- Hwk6: Anna (?), Lan (?)
- Prog5: Lan
- Hwk5: Wojtek (1,2,3), Anna (4,5)
- Prog4: Anna
- Hwk4: Wojtek (3,4,5), Lan (1,2)
- Prog3: Wojtek
- Hwk3: Anna (1,2), Lan (3)
- Midterm: Neal (5,6), Anna (2), Lan (4), Wojtek (3)
- Hwk2: Anna (problems 1,2) and Wojtek (3,4)
- Prog2: Lan
- Hwk1: Lan Liu (1,5) and Wojtek Jawor (2,3,4).
- Prog1: Anna Majkowska.

There will be a total of 6 homeworks and 6 programming assignments, each equally weighted within its category. Your weighted average will be computed as

- 0.20 * (sum of homework scores)/6
- + 0.25 * (sum of prog asst scores)/6
- + 0.20 * (midterm score)
- + 0.25 * (final exam score)
- + 0.05 * (lab participation)
- + 0.05 * (class participation)

Your weighted average will then is used to determine your letter grade as follows:

proposed range | grade | actual range | number assigned |

0-50 | F | 0-50 | 11 |

50-52 | D- | 50-52 | 0 |

52-57 | D | 52-57 | 4 |

57-60 | D+ | 57-60 | 5 |

60-63 | C- | 60-63 | 2 |

63-67 | C | 63-67 | 7 |

67-70 | C+ | 67-70 | 10 |

70-73 | B- | 70-72 | 8 |

73-77 | B | 72-75 | 5 |

77-80 | B+ | 75-77 | 4 |

80-85 | A- | 77-80 | 8 |

85-90 | A | 80-89 | 5 |

90-100 | A+ | 89-100 | 1 |

10 of 86 students withdrew, 4 failed for cheating.

The "proposed range" was the range originally stated at the start of the course. The "actual range" was the range I ended up using to assign grades. It gives slightly higher grades in the A-B range.

Roughly, I want grades to correspond to the following skill sets:

- C = Know algorithms and data structures we've studied in class, can simulate them on examples, know worst-case big-O running times, can implement them in C++. Can explain why these algorithms and data structures are correct, and how their run-time analyses go. Know how to run the debugger to catch most run-time errors in programs. Can complete somewhat complicated programming assignments involving templates, classes, etc, provided basic design is provided.

- B = Skills for C (above) and: given a new algorithm or data structure, can analyze running time and show correctness. Can adapt known algorithms to related problems. Comfortable and competent with the concept of "algorithm" independent of program. Comfortable running the debugger and competent at interpreting g++ compiler error messages and tracking down compile-time errors. Can distinguish a sound analysis of an algorithm (a proof) from an unsound one. Able to judge correctness of a proposed line of reasoning regarding correctness or running time of a program or algorithm.

- A = Skills for B and: can design and analyze efficient new algorithms and data structures. Comfortable with all algorithms, data structures, and techniques taught in the course. Able to debug even challenging compile-time and run-time errors in reasonable time. Completely comfortable with concepts underlying worst-case analysis of algorithms and data structures.

overall grades: 1 A+, 5 A, 8 A-, 4 B+, 5 B, 8 B-, 10 C+, 7 C, 2 C-, 5 D+, 4 D, 11 F, 10 withdraw, 4 failed for cheating

If you're curious to compare your scores to others':

- distribution of total scores on FINAL (out of 72)

- distribution of OVERALL weighted average at end of course

- /Hwk1Dist and /Prog1Dist -- see the distributions of all students' scores on hw1 and prog1
- midterm distributions (all the scores on the midterm, sorted, then plotted left to right. 1 = 100%)