Introduction to object-oriented analysis and design, programming using an object-oriented language, and implementation of linked data structures. Issues of modularity, software design, and programming style will be emphasized.
Data structures important to computer science will be studied, including trees, graphs, and hash tables. Searching and sorting techniques will be emphasized. Associated algorithms and their time and space efficiency will also be studied.
The design of algorithms and the analysis of their efficiency. Greedy algorithms, divide-and-conquer strategies, recursive backtracking, and dynamic programming are studied. Heuristic algorithms and NP-completeness are introduced.
This course explores advanced algorithmic techniques for solving complex optimization problems. Topics include modeling and solving problems using flow networks, designing and analyzing approximation algorithms for NP-hard combinatorial problems, leveraging randomization for efficient algorithm design, and understanding the principles and performance bounds of online algorithms.