Coursera is an online
education website that specializes in
offering academic-style courses and certificates to the general
public. Many universities and other academic institutions create
coursework for this online format, and I feel like it is a nice,
self-paced way to learn online.
I enrolled in the
Graph Search, Shortest Paths, and Data Structures
course offered by Stanford as a way to
learn more about algorithms and algorithm design. This
course is the second in the 4-course
Algorithms
specialization available
on Coursera, which is equivalent to a Stanford computer science
course offered to sophomores, juniors, and seniors within the
school, and is ample preparation for graduate study of algorithms.
The Graph Search, Shortest Paths, and Data Structures
course covers the basics of graphs, their applications, and
search and shortest path algorithms that can be used on them
to inform someone of their details. It also explained heaps
and binary trees, including the basics of red-black trees and
reasons balanced trees are useful, and touched on the basics
of hash maps and Bloom filters and what properties to look
for when designing hash functions for an application. The
assignments consisted of conceptual quizzes to test and
expand on the concepts covered in the (extensive) lectures,
as well as "coding" problems that required specific answers,
usually numerical values, that
could only reasonably be generated by code that correctly
implements an algorithm discussed in the lecture. The
lectures were world-class, since they are essentially the same
as the ones given at Stanford in their CS school, which departed
from the usual lectures in MOOCs that involve shorter, less
rigorous explanations and analysis of the topics. The course
also introduced some practical applications of algorithms, like
how a graph search could be used to illuminate the entire
web graph, showing the basic structure of the world wide web.
Hash maps are one of the most commonly used data structures
due to their speed and relative ease of implementation.
The professor mentioned the strongly connected components (SCC)
coding assignment was the most difficult in this course, but
it was nice to see it to get more experience coding and
implementing complex algorithms, and the Kosaraju algorithm itself is
useful for "zooming out" on graphs by looking at only distinct
SCCs, which could simplify a graph and help with understanding
a complicated graph's structure better.
My code base for this certificate is private, because
otherwise it would be too easy for my certificate to become
yours, too!