About this course

In this course, part of the Algorithms and Data Structures MicroMasters program, you will learn basic algorithmic techniques and ideas for computational problems, which arise in practical applications such as sorting and searching, divide and conquer, greedy algorithms and dynamic programming.

This course will cover theories, including:

  • how to sort data and how it helps for searching;
  • how to break a large problem into pieces and solve them recursively;
  • when it makes sense to proceed greedily;
  • how dynamic programming is used in genomic studies.

You will practice solving computational problems, designing new algorithms, and implementing solutions efficiently (so that they run in less than a second).

What you’ll learn

  • Essential algorithmic techniques – greedy algorithms, divide and conquer, binary search, sorting, dynamic programming
  • Best practices of implementing algorithms efficiently
  • Ways of testing and debugging programs

Prerequisites

  • Basic knowledge of at least one programming language: loops, arrays, stacks, recursion.
  • Basic knowledge of mathematics: proof by induction, proof by contradiction.

 

Who can take this course?

All

Meet Your Instructors

Alexander S. Kulikov

Visiting Professor
UC San Diego

Michael Levin

Chief Data Scientist
Yandex.Market

Daniel Kane

Assistant Professor,
Computer Science and Engineering & Dept. of Mathematics
UC San Diego

Pavel Pevzner

Ronald R. Taylor Professor of Computer Science
The University of California, San Diego

Neil Rhodes

Lecturer
UC San Diego

About MIT horizon

MIT Horizon is an expansive content library built to help you explore emerging technologies. Through easy-to-understand lessons, you’ll be guided through the complexities of the latest technologies and simplified expert-level concepts. Designed for both technical and non-technical learners, you can examine bite-size content that can lead to maximum career outcomes.

For a limited time, gain access to the complete MIT Horizon library.

Register today for exclusive entry.

About this course

Step into the area of more complex problems and learn advanced algorithms to help solve them.

This course, part of the Algorithms and Data Structures MicroMasters program, discusses inherently hard problems that you will come across in the real-world that do not have a known provably efficient algorithm, known as NP-Complete problems.

You will practice solving large instances of some of these problems despite their hardness using very efficient specialized software and algorithmic techniques including:

  • SAT-solvers
  • Approximate algorithms
  • Special cases of NP-hard problems
  • Heuristic algorithms

What you’ll learn

  • NP-completeness and how to deal with it
  • How to approximate algorithms
  • How to use heuristic algorithms to solve a problem more quickly when classic methods are too slow

Prerequisites

Basic knowledge of at least one programming language and material of the Algorithmic ToolboxData Structures and Algorithms on Graphs classes.

Who can take this course?

All

Meet Your Instructors

Daniel Kane

Assistant Professor,
Computer Science and Engineering & Dept. of Mathematics
UC San Diego

Alexander S. Kulikov

Visiting Professor
UC San Diego

About this course

The world and internet are full of textual information. We search for information using textual queries and read websites, books and e-mails.

These are all strings from a computer science point of view. To make sense of all this information and make search efficient, search engines use many string algorithms. Moreover, the emerging field of personalized medicine uses many search algorithms to find disease-causing mutations in the human genome.

In this course, part of the Algorithms and Data Structures MicroMasters program, you will learn about:

  • suffix trees;
  • suffix arrays;
  • how other brilliant algorithmic ideas help doctors to find differences between genomes;
  • power lightning-fast Internet searches.

What you’ll learn

  • Key ideas for pattern matching and suffix trees
  • Suffix arrays
  • Burrows-Wheeler Transform for compression
  • Applications of string algorithms in bioinformatics

Prerequisites

Basic knowledge of at least one programming language. Successful completion of the Algorithmic Designs and Techniques and Data Structures Fundamentals courses.

Who can take this course?

Unfortunately, learners from one or more of the following countries or regions will not be able to register for this course: Iran, Cuba and the Crimea region of Ukraine. While edX has sought licenses from the U.S. Office of Foreign Assets Control (OFAC) to offer our courses to learners in these countries and regions, the licenses we have received are not broad enough to allow us to offer this course in all locations. EdX truly regrets that U.S. sanctions prevent us from offering all of our courses to everyone, no matter where they live.

Meet Your Instructors

Pavel Pevzner

Ronald R. Taylor Professor of Computer Science
The University of California, San Diego

Michael Levin

Chief Data Scientist
Yandex.Market

About this course

In this course, part of the Algorithms and Data Structures MicroMasters program, you will learn how graph algorithms are used in two fundamental problems in modern biology:

  • How do we sequence a genome?
  • How do we construct an evolutionary “Tree of Life?”

In the first part of the course, you will learn how genome sequencing relies on using a graph to assemble millions of tiny DNA fragments into a contiguous genome. We will then shift gears and learn how to construct an evolutionary tree of life from genome data.

What you’ll learn

  • Graph algorithms
  • Algorithms for genome assembly
  • Phylogenetics

Prerequisites

Basic knowledge of:

  • at least one programming language: loops, arrays, stacks, recursion.
  • mathematics: proof by induction, proof by contradiction.

 

Who can take this course?

Unfortunately, learners from one or more of the following countries or regions will not be able to register for this course: Iran, Cuba and the Crimea region of Ukraine. While edX has sought licenses from the U.S. Office of Foreign Assets Control (OFAC) to offer our courses to learners in these countries and regions, the licenses we have received are not broad enough to allow us to offer this course in all locations. EdX truly regrets that U.S. sanctions prevent us from offering all of our courses to everyone, no matter where they live.

Meet Your Instructors

Pavel Pevzner

Ronald R. Taylor Professor of Computer Science
The University of California, San Diego

Phillip Compeau

Assistant Teaching Professor
Carnegie Mellon University

About this course

If you have ever used a navigation service to find the optimal route and estimate time to destination, you’ve used algorithms on graphs.

Graphs arise in various real-world situations, as there are road networks, water and electricity supply networks, computer networks and, most recently, social networks! If you’re looking for the fastest time to get to work, cheapest way to connect set of computers into a network or efficient algorithm to automatically find communities and opinion leaders in Facebook, you’re going to work with graphs and algorithms on graphs.

In this course, part of the Algorithms and Data Structures MicroMasters program, you will learn what a graph is and its most important properties. You’ll learn several ways to traverse graphs and how you can do useful things while traversing the graph in some order. We will also talk about shortest paths algorithms. We will finish with minimum spanning trees, which are used to plan road, telephone and computer networks and also find applications in clustering and approximate algorithms.

What you’ll learn

  • Graph exploration and decomposition into connected components
  • Shortest paths algorithms, including breadth-first search, Dijkstra’s algorithm and Bellman-Ford algorithm
  • Minimum spanning tree algorithms

Prerequisites

Basic knowledge of:

 

Who can take this course?

Unfortunately, learners from one or more of the following countries or regions will not be able to register for this course: Iran, Cuba and the Crimea region of Ukraine. While edX has sought licenses from the U.S. Office of Foreign Assets Control (OFAC) to offer our courses to learners in these countries and regions, the licenses we have received are not broad enough to allow us to offer this course in all locations. EdX truly regrets that U.S. sanctions prevent us from offering all of our courses to everyone, no matter where they live.

Meet Your Instructors

Daniel Kane

Assistant Professor,
Computer Science and Engineering & Dept. of Mathematics
UC San Diego

Alexander S. Kulikov

Visiting Professor
UC San Diego

Michael Levin

Chief Data Scientist
Yandex.Market

About this course

A good algorithm usually comes together with a set of good data structures that allow the algorithm to manipulate the data efficiently. In this course, part of the Algorithms and Data Structures MicroMasters program, we consider the common data structures that are used in various computational problems. You will learn how these data structures are implemented in different programming languages and will practice implementing them in our programming assignments. This will help you to understand what is going on inside a particular built-in implementation of a data structure and what to expect from it. You will also learn typical use cases for these data structures.

A few examples of questions that we are going to cover in this course are:

  1. What is a good strategy of resizing a dynamic array?
  2. How priority queues are implemented in C++, Java, and Python?
  3. How to implement a hash table so that the amortized running time of all operations is O(1) on average?
  4. What are good strategies to keep a binary tree balanced?

We look forward to seeing you in this course! We know it will make you a better programmer.

What you’ll learn

  • Basics of data structures including their fundamental building blocks: arrays and linked lists
  • How to use Dynamic arrays
  • A very powerful and widely used technique called hashing and its applications
  • How to use priority queues to efficiently schedule jobs, in the context of a computer operating system or real life
  • Basic structure of binary search trees – AVL trees and Splay trees
  • Applications of data structures

Prerequisites

Basic grasp of:

  • One programming language (C,C++,C#,Haskell,Java,JavaScript,Python2/3,Ruby,Scala)-loop, array, stack, recursion
  • Math-proof by induction and contradiction
  • The Algorithmic Design and Techniques class

 

Who can take this course?

Unfortunately, learners from one or more of the following countries or regions will not be able to register for this course: Iran, Cuba and the Crimea region of Ukraine. While edX has sought licenses from the U.S. Office of Foreign Assets Control (OFAC) to offer our courses to learners in these countries and regions, the licenses we have received are not broad enough to allow us to offer this course in all locations. EdX truly regrets that U.S. sanctions prevent us from offering all of our courses to everyone, no matter where they live.

Meet Your Instructors

Daniel Kane

Assistant Professor,
Computer Science and Engineering & Dept. of Mathematics
UC San Diego

Alexander S. Kulikov

Visiting Professor
UC San Diego

Michael Levin

Chief Data Scientist
Yandex.Market

Neil Rhodes

Lecturer
UC San Diego

About This Course:

In this course, part of the Algorithms and Data Structures MicroMasters program, you will learn basic algorithmic techniques and ideas for computational problems, which arise in practical applications such as sorting and searching, divide and conquer, greedy algorithms and dynamic programming.

This course will cover theories, including:

  • how to sort data and how it helps for searching;
  • how to break a large problem into pieces and solve them recursively;
  • when it makes sense to proceed greedily;
  • how dynamic programming is used in genomic studies.

You will practice solving computational problems, designing new algorithms, and implementing solutions efficiently (so that they run in less than a second).

What You’ll Learn:

  • Essential algorithmic techniques – greedy algorithms, divide and conquer, binary search, sorting, dynamic programming
  • Best practices of implementing algorithms efficiently
  • Ways of testing and debugging programs

Prerequisites:

  • Basic knowledge of at least one programming language: loops, arrays, stacks, recursion.
  • Basic knowledge of mathematics: proof by induction, proof by contradiction.

Who can take this course?

All

Meet Your Instructors:

Alexander S. Kulikov

Visiting Professor
UC San Diego

Michael Levin

Chief Data Scientist
Yandex.Market

Daniel Kane

Assistant Professor,
Computer Science and Engineering & Dept. of Mathematics
UC San Diego

Pavel Pevzner

Ronald R. Taylor Professor of Computer Science
The University of California, San Diego

Neil Rhodes

Lecturer
UC San Diego

About this course

Building a fully-fledged algorithm to assemble genomes from DNA fragments on a real dataset is an enormous challenge with major demand in the multi-billion dollar biotech industry.

In this capstone project, we will take the training wheels off and let you design your own optimized software program for genome sequencing.

This big data challenge will cover the entire MicroMasters program. After a brief introduction to the steps required to build a genome assembler, we will let you take steps on your own to start working with real data taken from a sequencing machine and see if you can design genome assembly software that can compete with popular software used in hundreds of sequencing labs around the world every day.

What you’ll learn

  • Graph algorithms
  • Algorithms for genome assembly
  • Algorithm optimization

Prerequisites

Basic knowledge of:

  • at least one programming language: loops, arrays, stacks, recursion.
  • mathematics: proof by induction, proof by contradiction.

 

Who can take this course?

Unfortunately, learners from one or more of the following countries or regions will not be able to register for this course: Iran, Cuba and the Crimea region of Ukraine. While edX has sought licenses from the U.S. Office of Foreign Assets Control (OFAC) to offer our courses to learners in these countries and regions, the licenses we have received are not broad enough to allow us to offer this course in all locations. EdX truly regrets that U.S. sanctions prevent us from offering all of our courses to everyone, no matter where they live.

Meet Your Instructors

Pavel Pevzner

Ronald R. Taylor Professor of Computer Science
The University of California, San Diego

Phillip Compeau

Assistant Teaching Professor
Carnegie Mellon University

About this course

If you look at two genes that serve the same purpose in two different species, how can you rigorously compare these genes in order to see how they have evolved away from each other?

In the first part of the course, part of the Algorithms and Data Structures MicroMasters program, we will see how the dynamic programming paradigm can be used to solve a variety of different questions related to pairwise and multiple string comparison in order to discover evolutionary histories.

In the second part of the course, we will see how a powerful machine learning approach, using a Hidden Markov Model, can dig deeper and find relationships between less obviously related sequences, such as areas of the rapidly mutating HIV genome.

What you’ll learn

  • Dynamic programming and how it applies to basic string comparison algorithms
  • Sequence alignment, including how to generalize dynamic programming algorithms to handle different cases
  • Hidden markov models
  • How to find the most likely sequence of events given a collection of outcomes and limited information
  • Machine learning in sequence alignment

Prerequisites

  • Dynamic programming and how it applies to basic string comparison algorithms
  • Sequence alignment, including how to generalize dynamic programming algorithms to handle different cases
  • Hidden markov models
  • How to find the most likely sequence of events given a collection of outcomes and limited information
  • Machine learning in sequence alignment

 

Who can take this course?

Unfortunately, learners from one or more of the following countries or regions will not be able to register for this course: Iran, Cuba and the Crimea region of Ukraine. While edX has sought licenses from the U.S. Office of Foreign Assets Control (OFAC) to offer our courses to learners in these countries and regions, the licenses we have received are not broad enough to allow us to offer this course in all locations. EdX truly regrets that U.S. sanctions prevent us from offering all of our courses to everyone, no matter where they live.

Meet Your Instructors

Pavel Pevzner

Ronald R. Taylor Professor of Computer Science
The University of California, San Diego

Phillip Compeau

Assistant Teaching Professor
Carnegie Mellon University

Program Overview

This MicroMasters program is a mix of theory and practice: you will learn algorithmic techniques for solving various computational problems through implementing over one hundred algorithmic coding problems in a programming language of your choice.

No other online course in Algorithms even comes close to offering you a wealth of programming challenges that you may face at your next job interview. To prepare you, we have invested thousands of hours designing challenges as an alternative to multiple choice questions that you usually find in MOOCs. We believe in learning through application, especially when it comes to learning algorithms.

For each algorithm you develop and implement, we have designed multiple tests to check its correctness and running time — you will have to debug your programs without even knowing what these tests are! It may sound difficult, but we believe it is the only way to truly understand how the algorithms work and to master the art of programming.

What you will learn

  • Understand essential algorithmic techniques and apply them to solve algorithmic problems
  • Implement programs that work in less than one second even on massive datasets
  • Test and debug your code even without knowing the input on which it fails
  • Formulate real life computational problems as rigorous algorithmic problems
  • Prove correctness of an algorithm and analyze its running time

Program Class List

1
Algorithmic Design and Techniques

Course Details
Learn how to design algorithms, solve computational problems and implement solutions efficiently.

2
Data Structures Fundamentals

Course Details
Learn how to design algorithms, solve comLearn about data structures that are used in computational thinking – both basic and advanced.putational problems and implement solutions efficiently.

3
Graph Algorithms

Course Details
Learn how dynamic programming and Hidden Markov Models can be used to compare genetic strings and uncover evolution.

4
NP-Complete Problems

Course Details
Learn about NP-complete problems, known as hard problems that can’t be solved efficiently, and practice solving them using algorithmic techniques.

5
String Processing and Pattern Matching Algorithms

Course Details
Learn about pattern matching and string processing algorithms and how they apply to interesting applications.

6
Dynamic Programming: Applications In Machine Learning and Genomics

Course Details
Learn about data structures that are used in computational thinking – both basic and advanced.

7
Graph Algorithms in Genome Sequencing

Course Details
Learn how to use algorithms to explore graphs, compute shortest distance, min spanning tree, and connected components.

8
Algorithms and Data Structures Capstone

Course Details
Synthesize your knowledge of algorithms and biology to build your own software for solving a biological challenge.

Meet your instructors

Pavel Pevzner

Ronald R. Taylor Professor of Computer Science
The University of California, San Diego

Daniel Kane

Assistant Professor,
Computer Science and Engineering & Dept. of Mathematics
UC San Diego

Alexander S. Kulikov

Visiting Professor
UC San Diego

Michael Levin

Chief Data Scientist
Yandex.Market

Neil Rhodes

Lecturer
UC San Diego

Phillip Compeau

Assistant Teaching Professor
Carnegie Mellon University