This course is the continuation of Algorithms and Data Structures I (CSC 225). Students will learn a variety of important data structures, algorithms, and algorithm design techniques. Relevant mathematical concepts are an integral part of this course.
This course includes:
• Advanced techniques for design, analysis, and implementation of algorithms and data structures
• Algorithmic design paradigms: greedy, divide-and-conquer, dynamic programming, randomization
• Advanced Analysis techniques: amortization and expected running time
• Advanced data structures: random hash families, disjoint sets
• Advanced graph algorithms: network flow, connectivity, minimum spanning trees, shortest paths
• Mathematical tools: graphs and digraphs, graph properties, planar graphs, networks
• String search
• Data compression
Students will learn the skills required for advanced algorithm design and should be able to apply the learned or similar approaches to new situations.
Further, students should be able to implement, in major programming languages, the studied algorithms and their data structures in a manner that preserves the time and space complexity of these algorithms and data structures. That said, the problem sets in this course will not necessarily involve any programming, and so students are expected to reinforce their understanding via self-directed programming.