Computer programming, data structure, and algorithm design.
This course will focus on how to prepare a CS major student as a skilled computer programmer. There will be three major themes in this course -- computer algorithm designs, data structure, and computer program implementation techniques.
The computer algorithm design will focus on various methodologies, including divide-and-conquer, dynamic programming, combinatorial optimization, graph theory and its applications, randomized and amortized algorithm analysis. These methodologies will be illustrated by examples from ACM on-line problem archive, so that the student can learn to solve real-world problem.
This course will also focus on advanced data structures. Several self-adjusting data structures, including splay trees and pointer-jumping trees for union-and-find operation will be introduced. The introduction of these advanced data structures will facilitate the efficiency of computer programs, and provide useful tools for other related applications.
The computer implementation techniques will cover various disciplines in computer programming, including structure programming, programming style, debugging techniques, system tools utilization, and object-oriented programming. The goal of this training is that the students will be able to establish a solid foundation in expression what they want to implement, so that they could write code to realize the algorithms they learn from the first part of the course.
This course will be accompanied by weekly homework assignments, mainly from the ACM on-line problem archive, to give the students a hand-on experience on how to solve difficult problems with computers. Therefore, extensive understanding of C/C++ programming environment is required. The students will need to understand how to write program, so that they can combine the idea of algorithm design with solid implementation techniques to solve real problem correctly.