**Most recent message posted:
11/30**

- Class meets Tuesdays and Thursdays from 5:00-6:20, in room SAL 127.
- 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 by appointment.

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

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 example applications.

The grading will be based, with roughly equal weights on homework programming assignments, other homework assignments, and programming challenges in class.

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.

- 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 usual 2:00-3:00.
- 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.