This course provides an in-depth study of fundamental algorithms and data structures, focusing on their design, analysis, and application in solving real-world problems. Students will explore key algorithmic paradigms, such as divide and conquer, dynamic programming, and greedy algorithms, while also learning techniques for analyzing algorithm correctness and efficiency using mathematical induction and asymptotic notation. The course aims to equip students with the skills needed to develop efficient and scalable solutions to computational problems, laying a strong foundation for advanced studies in computer science.
Throughout this course, students will:
CS 303 [Min Grade: C] and (MA 125 [Min Grade: C] or MA 225 [Min Grade: C])
Introduction to Algorithms (3rd Edition), Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Online
Assignments: This course includes written assignments to enhance learning and practical application. There will be 7 theory assignments throughout the semester. You are expected to complete all of them to help you learn the topics discussed in lectures.
Exams: The course will include 2 midterm exams and 1 final exam. The midterm exams are periodic assessments that focus only on the material covered since the previous exam. The final exam is comprehensive, covering all topics discussed throughout the semester. All exams will be closed book, and they will be conducted in the form of in-person paper-based exam.
Participation: Participation is assessed through through random in-class exercises and quizzes.