- Class. Online Synchronous Wed./Fri. 10:15-11:30 am eastern time (Durham local time). Meeting on Zoom at https://duke.zoom.us/j/95618214866. Only authenticated Duke users will be able to access the zoom meeting; you must use your Duke zoom account.
- Instructor. Brandon Fain
- Graduate Teaching Assistants: Adam Carriker and Wei Zhang
- Website. https://sites.duke.edu/compsci290_01_f2020/
- Box Folder. All files for homework, project directions, and class slides will be available on Duke box: https://duke.box.com/s/50wr93dlvs4ic4pvfinhpe1cirhiecqv.
- Recordings. You will be able to find recordings of all classes on Duke Warpwire at https://warpwire.duke.edu/w/8Q4EAA/.
- Piazza. We will use piazza for discussion, questions, and contacting the teaching team. You can find and enroll at the following link: piazza.com/duke/fall2020/cs29001.
- Gradescope. All assignment deliverables will be turned in and graded on gradescope. You can use the entry code 9PZZ27 to register for the course.
- Reading. There are no required texts for this course. Supplemental notes, articles, and chapters will be posted on the course schedule.
- Office Hours. All times are listed in US eastern time (Durham local time).
- 3:00-4:00 pm – Adam at https://duke.zoom.us/j/91968392236
- 5:00-6:00 pm – Adam at https://duke.zoom.us/j/91968392236
Description. This is a course on the design and implementation of modern algorithms that deal with hard problems and big data. The course stresses application and project based development of algorithmic techniques. Emphasis is placed on algorithmic ideas that have had substantial impact in the real world, including approximation, randomization, hashing, streaming, spectral techniques, optimization, and search.
The course is project-driven: students will complete several homework assignments as well as a larger student-driven course project. There are no exams.
Course Objectives. Upon completion of this course, students will be able to
- Design and implement efficient algorithms for computationally difficult problems.
- Analyze the performance of algorithms using mathematical arguments and empirical evaluation.
- Propose and execute a student-driven group algorithms project.
- Communicate the results of a project in algorithm design via oral presentation to peers and a written research article.
- Summarize the significance of algorithmic insights for real world projects in computer science.
Prior Background. Students should have programming, algorithms, and data structures experience at least at the level of CompSci 201, and have prior experience in proof-based discrete mathematics at the level of CompSci 230. Experience of algorithm design and analysis at the level of CompSci 330 will be helpful, but is not required, and there will be minimal overlap in content between this course and CompSci 330.