Successful problem solving in computer science requires a solid theoretical foundation as well as ability to apply the theory to practical problem solving.
The aim of this course is to develop your ability to apply knowledge of algorithms, data structures, and complexity theory to given problems. As a professional it is useful to be able to analyze a problem, judge the efficiency of proposed algorithms, and to implement them quickly and correctly. In this course, you will practice this by solving a number of homework assignments and while working under time constraints during problem solving sessions.
Note that this is an unusually heavy and work intensive course.