This course will first cover some classical topics in algorithms, including sorting and searching, divide and conquer, dynamic programming, data structures, and graph algorithms. It will then introduce some advanced algorithmic techniques that are useful when dealing with big data, such as hashing, sampling, data sketching, streaming algorithms, parallel and distributed algorithms, and external memory algorithms.