## Algorithms course by Stanford Univeristy

I could complete the algorithms course which I started from April 2018! 🎉 It took me about 4 months to finish.

This course is one of the Massive Open Online Courses (so-called “MOOCs”), and
is hosted by **Coursera**.

It’s open with the title
**“Algorithms, a 4-course specialization by Stanford University”**
and the classes are all made by Stanford Univeristy.

This course is composed of 4 courses and you can complete all courses within 4 months. I would recommend to spend (at least) 8 hours to study every week.

I have studied the algorithms by my own through some books, but I wanted to study all topics systematically and I picked this course.

It costs only **$49 dollars per month** and is cheap compared to the content and quality.

If you want to know about the course more in detail, please refer to the official webiste. https://www.coursera.org/specializations/algorithms

## Tim Roughgarden, Professor

All classes are taught by **TIm Roughgarden, Professor**.

He gave very good explanation about those difficult algorithms with concrete examples. I strongly recommend to take his classes to study algorithms.

## Content

### Course 1: Divide and Conquer, Sorting and Searching, and Randomized Algorithms

- “big-oh” notation and asymptotic analysis
- Divide-and-conquer basics
- The master method for analyzing divide and conquer algorithms
- The QuickSort algorithm and its analysis
- probability review
- Linear-time selection
- graphs, cuts, and the contraction algorithm

Here we learn Big-O notation, divide and conquer algorithms and master method. Also some algorithms like quick sort and minimum cuts of the graphs.

### Course 2: Graph Search, Shortest Paths, and Data Structures

- Breadth-first and depth-first search
- computing strong connected components(SCC) ; applications
- Dijkstra’s shortest-path algorithm
- Heaps
- balanced binary search trees
- Hashing; bloom filters

This course 2 also covers many topics. These topics are foundamental of algorithms and are also very useful and necessary knowledge to every software engineers.

### Course 3: Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming

- Two motivating applications;
- introduction to greedy algorithms; a scheduling application;
- Prim’s MST algorithm.
- Kruskal’s MST algorithm and applications to clustering
- Huffman codes
- introduction to dynamic programming
- Advanced dynamic programming: the knapsack problem, sequence alignment, and optimal binary search trees.

Here we need to deal with more difficult issues such as knapsack problems using dynamic programming..

### Course 4: Shortest Paths Revisited, NP-Complete Problems and What To Do About Them

- The Bellman-Ford algorithm
- all-pairs shortest paths.
- NP-complete problems and exact algorithms for them
- Approximation algorithms for NP-complete problems
- Local search algorithms for NP-complete problems

It was very hard to figure out what the NP-hard and NP-complete problems means.

## Certificate

Completing the assignments for every week and 4 all courses, you can get this certificate.

## Summary

I feel like I studied a lot from this course.

This is from Professor Tim Roughgarden, we study those greatest hits of the algorithms from the history. And we can put new technique to our toolbox.

It is great that we can deal with complex problems in the real world using those skills😊

I still have shallow undertandings in some part (especially NP-Complete), so I’ll keep studying!