This follow-on course to data structures (e.g., 605.202 Data Structures) provides a survey of computer algorithms, examines fundamental techniques in algorithm design and analysis, and develops problem-solving skills required in all programs of study involving computer science. Topics include advanced data structures (red-black and 2-3-4 trees, union-find), algorithm analysis and computational complexity (recurrence relations, big-O notation, introduction to NP-completeness), sorting and searching, design paradigms (divide and conquer, greedy heuristic, dynamic programming), and graph algorithms (depth-first and breadth-first search, minimum spanning trees). Advanced topics are selected from among the following: multithreaded algorithms, matrix operations, linear programming, string matching, computational geometry, and approximation algorithms. The course will draw on applications from Bioinformatics. Prerequisite(s): 605.202 Data Structures or equivalent, and 605.201 Introduction to Programming Using Java or equivalent. 605.203 Discrete Mathematics or equivalent is recommended.Course Note(s): This course does not satisfy the foundation course requirement for Data Science, Computer Science, or Cybersecurity. Students can only earn credit for one of 605.620, 605.621, or 685.621.