Jinho D. Choi
This is an advanced programming course in Computer Science that teaches how to design efficient structures and algorithms to process big data and methods to benchmark their performance for large-scale computing. Topics cover data structures such as priority queues, binary trees, tries, and graphs as well as their applications in the construction of effective algorithms such as sorting, searching, balancing, traversing, and spanning. Advanced topics such as network flow and dynamic programming are also discussed. Throughout this course, students are expected to
  • Have deep conceptual understanding in various data structures and algorithms.
  • Implement their conceptual understanding in a programming language.
  • Explore the most effective structures and algorithms for given tasks.
  • Properly assess the quality of their implementations.
Intermediate-level of Java programming is a prerequisite of this course. There are topical quizzes and homework assignments that require sufficient skills in Java programming, Git version control, Gradle software project management, and scientific writing.


Last modified 8mo ago