CS499: Algorithmic Problem Solving (Fall 2006)
Most recent message posted:
- Class meets Tuesdays and Thursdays from 5:00-6:20, in room
- The instructor is Prof. David Kempe (Office: SAL 232, office
phone (213)-740-6438, e-mail: ).
- There are no TAs.
- The instructor's office hours are Wednesdays from 2:00-3:00, or
Course Overview, Prerequisites, Syllabus, Textbook, Grading
This course aims to draw a connection between algorithms, theory, and
problems in the real world. The goal is for students to develop an
understanding of the core algorithmic challenges in real-world
problems, learn which algorithms to apply, and write computer programs
solving the problems.
The algorithms material will be drawn roughly from a standard
undergraduate algorithms course (recursion, strings, basic graph
algorithms, dynamic programming, geometric algorithms, logic).
The focus will not be on proving correctness or detailed runtime
analysis. Rather, students will use those algorithmic techniques to
solve toy versions of real-world problems, and be required to draw
connections of theory to the real world themselves.
An important component will be implementing efficient solutions to the
real-world problems, and verifying their correctness on given data sets.
The course is intended as a technical elective. It requires basic
knowledge of algorithms, including some of the algorithmic
techniques discussed below. The discussion of the underlying
mathematics will be necessarily brief, as the focus is on
applications. Having taken CSCI271 and CSCI303 successfully
should certainly be sufficient, though talented younger students
may also succeed in the course.
The textbook, used mostly for reference, is
- Cormen/Leiserson/Rivest/Stein: Introduction to Algorithms (2nd
The (rough) syllabus for the course is as follows. Topics may be added
or removed depending on available time:
- Basic Programming Tasks (ca 2 weeks):
string processing, simple mathematics, reading and writing data,
basic data structures.
- Graph Algorithms (ca 3 weeks):
shortest paths, topological sort, spanning trees, graph search,
(networks flows, time permitting).
Focus on real-world applications
- Paradigms (ca 2 weeks):
recursion, exhaustive search, how to implement them.
- Dynamic Programming (ca 3 weeks)
- Geometric Algorithms (ca 3 weeks):
line intersections, angles, convex hull, polygon area
- Logic (ca 1 week): inference and deduction
The course will consist of one or two lectures per week, and
supervised lab sessions during which students implement
algorithmic solutions to real-world applications. The lectures
focus on a recap and explanation of the basic material and
The grading will be based, with roughly equal weights on homework
programming assignments, other homework assignments, and
programming challenges in class.
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
- 11/30: The eleventh (and final) homework
assignment has been posted. It is due no later than 6pm
on Tuesday, 12/12.
- 11/20: The tenth homework assignment has been
posted. It is due in class on Thurs, 11/30.
- 11/02: The ninth homework assignment has been
posted. It is due in class on Thurs, 11/16.
- 11/02: The eigth homework assignment has
been (belatedly) posted. It is due in class on Thurs, 11/02.
- 10/12: The seventh homework assignment has been
posted. It is due in class on Thurs, 10/12.
- 10/05: The sixth homework assignment has been
posted. It is due in class on Thurs, 10/12.
- 10/03: The fifth homework assignment has been
posted. It is due in class on Thurs, 10/05.
- 10/03: The fourth homework assignment has been
posted (belatedly). It was due in class on Tuesday, 09/19.
- 09/12: The third homework assignment has been
posted (belatedly). It is due in class on Tuesday, 09/12.
- 08/31: The second homework assignment has been
posted. It is due in class on Tuesday, 09/05.
- 08/25: The first homework assignment has been
posted. It is due in class on Tuesday, 08/29.
- 08/23: Today's office hours will be from 3:00-3:30 instead of the
- 08/23: Homework 1 (due 08/24) is to implement a simple stack data
structure with an array of fixed size. The operations
supported should be create (a new stack), push (an element on
the stack), pop (an element from the stack), and top (read the
top element without popping it). You can use C/C++ or Java,
and type or hand-write your solution.