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 you understand how these algorithms work.

Topics that will be covered in this course include:

Priority Queues, Heaps, Binary Search Trees, Sorting, Recursion, Greedy, Dynamic Programming, String Matching, Graphs Algorithms, BFS, DFS, Shortest Path, MST.