How do these two subjects fit together?
When you want to accomplish some form of computation, you express it as an algorithm, a series of steps that generally does something. If that algorithm relies on data to succeed, then that data is normally structured in computer memory in a specific way, as a list, a tree, a graph, an array, a map, or some other structure. Data structures can exist without algorithms; however, without algorithms, maintaining data in a structure is just a waste of effort. This class provides an algorithms-first approach and presents supporting data structures to meet the needs of the algorithm.
How is this different from the widely available classes that already exist?
You will find that most classes are named “Data Structures and Algorithms”. The emphasis is on the data structure and, then, the algorithm. This class turns that around and puts algorithms as its primary concern. This problem-focused approach grants you the insight to analyze, evaluate, and create your own algorithms (and needed data structures) to solve problems that you may likely encounter in the real world, as well as in interviews. Break out of linked lists and binary trees to explore how to interact with multidimensional data, how to determine if you can easily solve a problem with a minimum spanning tree, and how to use probabilistic techniques to quickly determine optimal solutions.
Will I learn about XXX algorithm or YYY data structure in this class?
Maybe? The great thing about this class is that it will provide you with an intuitive understanding of the theory and applicability of many different algorithms. These algorithms are used in many modern problems being solved by companies today: distributed search, text processing, social cluster analysis, process control, and compiler optimization.