The course focuses on the design and analysis of algorithms. Topics Include: Review of the basic data structures; Design techniques: divide-and-conquer, dynamic programming, greedy algorithms, And graph algorithms: Elementary graph algorithms, Breadth-first search (BFS), Depth-first search (DFS), Strongly-connected components, Minimum spanning tree, Shortest paths; selected topics: String Matching, Computational Geometry