## 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 wonderful course.

This is what Professor Tim Roughgarden used to say in the class: We can study those **greatest hits of the algorithms from the history**.
**And we can put those new technique to our own 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!