CS 401 Algorithms • 5 Cr.
This course teaches the concepts and skills required to design, implement and analyze algorithms for constructing efficient computer programs. The course covers elementary data structures, searching, sorting, graph and string algorithms, and algorithm design principles such as dynamic programming, greedy, divide-and-conquer paradigms. The emphasis is on applications and scientific performance analysis of algorithms. Prerequisites: CS 300 with a C or better, MATH 301 and admission to BC CS program, or instructor's permission.
After completing this class, students should be able to:
- Discuss the runtime and memory efficiency of principal algorithms for sorting, searching, and hashing
- Implement fundamental algorithms
- For each of the algorithm design paradigms (greedy, divide-and-conquer, and dynamic programming), identify a practical example to which it would apply
- Analyze algorithms and data structure operations to determine their algorithmic complexity
- Use Big-O notation formally to give asymptotic bounds on time and space complexity of algorithms
- Evaluate algorithms, select from a range of possible options, provide justification for that selection, and implement the algorithm in a particular context