Introduction

Get an overview of your program. Meet your instructors, and refresh your python skills. Learn the framework to deconstruct any open-ended problem and then understand the concepts of time and space complexity, essential tools for evaluating different data structure & algorithms.

Python Refresher

How to Solve Problems

Efficiency

Unscramble Computer Science Problems

Arrays and Linked Lists

Stacks and Queues

Recursion

Trees

Maps and Hashing

Show Me the Data Structures

Basic Algorithms

Learn and implement basic algorithms such as searching and sorting on different data structures and examine the efficiency of these algorithms. Use recursion to implement these algorithms and then learn how some of these algorithms can be implemented without recursion. Practice selecting and modifying these algorithms for a variety of interview problems.

Sorting Algorithms

Faster Divide & Conquer Algorithms

Problems vs. Algorithms

Greedy Algorithms

Build on your algorithm skills by learning more advanced algorithms such as brute-force greedy algorithms, graph algorithms, and dynamic programming, which optimizes recursion by storing results to sub problems.

Graph Algorithms

Dynamic Programming

A

Route Planner

01. Welcome!

Welcome!

Welcome to the Data Structures and Algorithms program!

At its core, this program is about how to write code to solve problems and to do so efficiently.

You’re probably well aware that computers can be used to solve all sorts of problems—from calculating the fastest route on a map, to sequencing the human genome. But there is almost always more than one way to solve a problem, and some ways can be dramatically more efficient than others. Two approaches may solve the same problem, but one may take milliseconds, while the other takes hours.

How do you look at a problem and identify different ways that you could solve it? And how do you know which approaches are more or less efficient? Will your solution run quickly or slowly? Will it take up a lot of space in the computer’s memory, or only a little? Being able to answer these kinds of questions will make you a more effective developer—and also help you perform much better during technical interviews.

The key to mastering these skills is practice. Simply hearing about algorithms and data structures will not make you proficient at analyzing or implementing them in a real-world situation. For that reason, our goal in this program is not only to explain key concepts, but also to give you lots of chances to practice the key skills through hands-on exercises.

Overview

Here’s a brief overview of what we’ll cover in the program.

1. Welcome

In this section, we’ll go over some important foundational topics. We’ll review some basic Python concepts that you’ll need, talk about how to solve problems, and then consider some of the fundamental ideas related to efficiency.

2. Data Structures

When you write code to solve a problem, there will always be data involved—and how you store or structure that data in the computer’s memory can have a huge impact on what kinds of things you can do with it and how efficiently you can do those things. In this section, we’ll explore different data structures, and consider the pros and cons of using different structures when solving different types of problems.

3. Basic Algorithms

To solve such problems, we need to come up with a very specific sequence of steps that will get us from whatever input we start with to the desired output. This kind of clear, highly specific procedure is called an algorithm. In this section, we’ll get started with some elementary algorithms, such as binary search and mergesort.

4. Advanced Algorithms

In this final part of the program, we’ll dive into some more advanced topics—including greedy algorithms, graph algorithms, dynamic programming, and linear programming.

Let’s get started!