CS303: Design and Analysis of Algorithms (Spring 2008)

Most recent message posted: 05/14


The grading scale is given here. These are not curves or class percentages, but your percentages. For instance, if the weighted average percentage of your grades is 54%, then you get at least a B. If the final exam turns out to be very difficult, this scale may become a little nicer. It will not become tougher.

p Grade

Homework will be assigned roughly once per week, and graded. Of all assignments, the two worst ones will be dropped in calculating your grades. Homeworks are due in class on the date specified. Each student can submit up to 3 homeworks up to one day late. Late submissions should be made to the TA or instructor in office hours, no later than noon on the day after the due date. Submissions more than 24 hours late will not be accepted. Once 3 homeworks have been submitted late, subsequent late submissions will not be accepted.

Course Overview, Syllabus, Textbook, Prerequisites

The course is intended as a first undergraduate course in the design and analysis of algorithms. It will cover basic algorithm design techniques, runtime analysis, correctness proofs, and specific algorithms with an emphasis on graph algorithms. It will also cover the limits of computation: problems which cannot be solved efficiently, and problems which cannot be solved with a computer, never mind the amount of time allowed.

The textbook is

Additional useful information (and often, better explanations) can be found in:

The (rough) syllabus for the course is as follows. Topics may be added or removed depending on available time:

  1. Introduction: Insertion Sort [from Chapters 1,2]
  2. Runtime Analysis and Big-O Notation [Chapter 3]
  3. Graph Algorithms: Breadth-First Search, Depth-First Search, Topological Sort, Shortest Paths (Dijkstra), Minimum Spanning Trees (Kruskal, Prim) [from Chapters 22-24]
  4. Divide&Conquer and Recurrences: Merge Sort, Binary Search, Integer Multiplication, Strassen's Algorithm, Order Statistics [from Chapters 1, 4, 9, 28]
  5. Dynamic Programming [Chapter 15]
  6. Limits of Computation: Theory of Computability [not in CLRS]
  7. Limits of Efficient Computation: Theory of NP-Completeness [Chapter 34]
  8. Lower Bounds: Sorting [from Chapter 8]
  9. Time Permitting: Number-theoretic algorithms and RSA [Chapter 31]

Academic Integrity, Collaboration

All students are expected to maintain the utmost level of academic integrity. Any attempts to cheat will lead to appropriate sanctions. Please consult the USC Student Conduct Code (general overview) for details on what is and is not appropriate, and for the possible consequences of infractions.

Homeworks should be solved mostly individually. Asking classmates for small hints is ok. For bigger hints, ask the TA or instructor. Substantial collaboration, in particular in writing up solutions or during programming assignment, is not appropriate. Nor is of course copying classmates' solutions. It is also never appropriate to search for solutions online and try to pass them off as your own work.