The course aims to introduces basic concepts on algorithms by looking atthe real-world problems that motivate them. It teaches various design andanalysis techniques for problems that arise in computing applications, andencourage the students to understand the algorithm design process and the roleof algorithms in the broader field of computer sciences. The students will be familiar with majoralgorithms, such as fundamental graph-based algorithms, greedy algorithms,divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithmsand randomized algorithms. In addition, upon completion of this course, thestudents should be able to program these algorithms for solving correspondingproblems.