All Computer Science is based on the concept of an efficient algorithm: a finite sequence of primitive instructions that, when executed according to their well-specified semantics, provably provide a mechanical solution to the infinitely many instances of a complex mathematical problem within a guaranteed number of steps of least asymptotic growth. We thus call these the 'virtues' of Theoretical Computer Science:
Building on undergraduate CS300 (Introduction to Algorithms), the graduate-level course CS500 discusses the design of advanced algorithms and analyzes their behaviour with respect to various notions of performance such as
Their practical impact is demonstrated in selected implementations.
Lecturer: Martin Ziegler
Classroom: Online
Schedule: Tuesdays and Thursdays, 9:00am to 10:30am
Lectures start from March 17th.
Language: English only
Teaching Assistants: 임동현 (klimdhn@kaist.ac.kr), Ivan Koswara (chaoticiak@kaist.ac.kr)
Homework: Handwritten individual solutions (English only) and programming assignments in ELICE.
Grading: In view of the recent switch to online teaching and cancelled midterm, the final grade is determined to 50% from homework and 50% from final exam.
Midterm: cancelled
Final exam: TBD
Prerequisites: CS204 (Discrete Mathematics), CS300 (Introduction to Algorithms)
0. Preliminaries (pdf,ppt,video)
1. Introduction (pdf,ppt,video)
2. Examples (pdf,ppt,video)
3. Tree Data Structures (pdf,ppt,video1,video2,video3,video4)
4. Amortized Analysis (pdf,ppt,video1,video2,video3,video4,video5,bonus)
5. Randomization (pdf,ppt,video1,video2,video3)
6. Online/Competitive (pdf,ppt,video1,video2,video3)
7. Complexity Theory (pdf,ppt,video1,video2)
8. Approximation (pdf,ppt,video1,video2,video3)
(9. Memory≈parallel Time)
10. Conclusion (pdf,ppt)