-
An algorithm is a step-by-step process to achieve some outcome. When algorithms involve a large amount of input data, complex manipulation, or both, we need to construct clever algorithms that a computer can work through quickly.
By the end of this course, you’ll know methods to measure and compare performance, and you’ll have mastered the fundamental problems in algorithms.
Overview
Syllabus
-
- Building Blocks: The nuts and bolts of how computer scientists communicate algorithmic ideas.
- Pseudocode: Start your study of algorithms by learning about this key aspect of how computer scientists communicate.
- Conditional Algorithms: All interesting algorithms perform tests, and react in different ways based on the results of those tests.
- Manipulating Numbers: Most algorithms store and manipulate numbers using assignable variables.
- Repetition: Performing simple actions repeatedly is at the heart of every interesting algorithm.
- Arrays: Arrays are critical for understanding algorithms that manipulate collections of information.
- Array Algorithms: Master repetition through understanding algorithms that manipulate arrays.
- Searching an Array: Arrays can store lots of information. To find out what's there, you just have to look!
- Binary Search: Looking in the middle of a sorted array requires a bit of cleverness, but it can save you a lot of work.
- Sorting an Array: Sorting an array with selection sort unlocks the power of binary search.
- Insertion Sort: There's more than one way to sort an array. Insertion sort is another classic algorithm for sorting.
- The Speed of Algorithms: Part of the study of algorithms is learning to predict how fast or slow they run.
- Timing Programs with a Stopwatch: In science, sometimes the best thing to do is run an experiment!
- Counting Operations: Find out why computer scientists talk about "cost" instead of "time."
- Best, Worst and Average Case: Algorithms don't always have predictable costs. To prepare for the worst or hope for the best, you need to know what those are!
- Comparing Algorithms: Big O notation is a simple notation that helps computer scientists compare algorithms and implementations.
- Understanding Big O: The flexibility of Big O can make it a bit tricky. But it's the trickiness that makes it so useful!
- The Mathematics of Big O: Dive into the details to really understand why Big O notation works the way it does.
- Stable Matching: You now have the tools to understand and reason about important algorithms, including algorithms that can change the course of people's lives.
- The Stable Matching Problem: Discover a simple problem faced by every teaching hospital and medical student every year.
- Using Greediness: An individual applicant can make the best decision with a greedy algorithm.
- Deferred Acceptance Algorithm: The Gale-Shapley algorithm uses individual greedy decisions to produce a global matching.
- Correctness: An algorithm for producing a stable matching is only good if it outputs a stable matching!
- Termination: A good algorithm can't just promise that it will do the right thing if it finishes. A good algorithm actually has to deliver.
- Running Time: The tools you've learned for describing the speed of algorithms apply to the Gale-Shapley deferred acceptance algorithm.
- Variants: Transition from an oversimplified problem to one that's much more like the real world.
- Who Benefits?: In order to really understand an algorithm, you need to think about more than just the mathematics.