This course is about fundemental algorithm design and analysis. In the course we will

(1) introduce classic algorithms and data structures for fundemental problems, e.g., searching, sorting and graph problems; 

(2) introduce the techniques regarding how to design and analyze algorithms. e.g., greedy, recursion, dynamic programming.

Many examples will be provided throughout the course to help understand how these algorithms work.

Topics that will be covered in this course include:

Priority Queues, Heaps, Binary Search Trees, Sorting, Algorithm Design Techniques (Recursion, Greedy, Dynamic Programming, String Matching), Graphs (BFS, DFS, Shortest Path, MST).