Algorithms and Data Structures

Design and Implement Algorithms using Python

Get Your Brochure

Course Dates

STARTS ON

September 29, 2021

Course Duration

DURATION

10 weeks, online
5-10 hours/week

Course Duration

Program Prerequisites

This program provides in-depth understanding of general computational problems and their algorithms. It focuses on the core principles used to design these algorithms, prove their correctness, and analyze their complexity. The program also explores the advanced algorithm and data structures that support these algorithmic concepts. Participants should have a math background that includes basic calculus as well as working knowledge of Python. Proficiency with Jupyter Notebooks is a plus.

Learn the Core Principles and Real-World Applications of Algorithm Design

There is a rapidly growing demand for technology professionals who understand the ways in which algorithms drive today’s world. The number of technical professionals who list “algorithms and data structures” among their skills is increasing by 25% year over year, according to LinkedIn Insights. Keep pace with this rapidly growing field by enrolling in Algorithms and Data Structures, an online program offered by Carnegie Mellon University's School of Computer Science Executive Education. Participants receive an in-depth understanding of the design principles behind real-world, problem-solving algorithms, as well as the data structures that support them.

"Carnegie Mellon is known for being at the forefront of technology. … The School of Computer Science is internationally recognized."

SOURCE: Forbes

Key Outcomes

Software engineers and developers, as well as early-career technology graduates and other IT professionals, receive a hands-on understanding of algorithms and data structures. Over the course of 10 weeks, you will:

  • Explain the key concepts related to algorithms and data structures.
  • Model computational problems and design algorithms.
  • Apply standardized algorithmic building blocks.
  • Analyze algorithms to verify correctness and efficiency.
  • Explore real-world applications of algorithms and data structures.
  • Practice implementing algorithms using Python.

Program Modules

Each of the 10 modules focuses on a specific type of algorithm or data structure, encompassing an array of computational theories and applications.

Module 1:

Introduction to Algorithms

Learn fundamental concepts of algorithm design, including:

  • Illustrating the key components of an algorithm and the notations used for time complexity
  • Performing recurrence analysis and analyzing the time complexity of merge-sort and quick-select algorithms

Module 2:

Concrete Models and Tight Upper and Lower Bounds

Delve deeper into time complexity and learn to prove upper and lower bounds (worst and best possible runtime) of comparison-based algorithms, including:

  • Explaining the concept of concrete models as well as tight upper and lower bounds
  • Applying the information-theoretic and adversary techniques to prove upper and lower bounds of computational problems

Module 3:

Greedy Algorithms

Learn when to apply greedy algorithms, which are designed for rapid optimization, including:

  • Explaining what a greedy algorithm is and how to design such algorithms
  • Proving the optimality of greedy algorithms

Module 4:

Dynamic Programming

Learn dynamic programming algorithms and explore their real-world applications, including:

  • Developing and implementing dynamic programming
  • Comparing the bottom-up and the top-down approaches to dynamic programming.

Module 5:

Hashing and Streaming

Explore data structures, such as hash tables and data streams, and apply them to solve computational problems, including:

  • Examining the properties of hashing and applying it to the dynamic dictionary problems
  • Using hashing to solve problems on data streams

Module 6:

Network Flows

Learn the fundamental concepts of network flows and how to use max-flow algorithms to solve optimization problems, including:

  • Finding the maximum flow and minimum cut of a given network
  • Designing and implementing network flow algorithms to solve problems

Module 7:

Linear Programming

Formulate and solve linear programming (LP) problems, including:

  • Exploring LP solutions for the min-cut max-flow and the operations research problems
  • Applying LP algorithms, such as the Simplex algorithm

Module 8:

NP-Completeness

Understand the concepts of P (polynomial time problems) and NP, a wider class of problems that are potentially intractable, including:

  • Proving a problem is NP-complete
  • Developing approximation algorithms to solve NP-complete problems

Module 9:

Multiplicative Weights Algorithms

Learn to formulate multiplicative weights algorithms (frequently used in prediction, learning, and optimization systems) and prove their correctness, including:

  • Using the multiplicative weights framework to solve problems
  • Proving the correctness of multiplicative weight algorithms

Module 10:

Gradient Descent

Learn the definition, core concepts, and applications of gradient descent (GD)—a method commonly used to solve optimization and machine learning problems, including:

  • Examining the fundamentals of the GD framework and convexity
  • Implementing GD algorithms to solve convex optimization problems

Module 1:

Introduction to Algorithms

Learn fundamental concepts of algorithm design, including:

  • Illustrating the key components of an algorithm and the notations used for time complexity
  • Performing recurrence analysis and analyzing the time complexity of merge-sort and quick-select algorithms

Module 6:

Network Flows

Learn the fundamental concepts of network flows and how to use max-flow algorithms to solve optimization problems, including:

  • Finding the maximum flow and minimum cut of a given network
  • Designing and implementing network flow algorithms to solve problems

Module 2:

Concrete Models and Tight Upper and Lower Bounds

Delve deeper into time complexity and learn to prove upper and lower bounds (worst and best possible runtime) of comparison-based algorithms, including:

  • Explaining the concept of concrete models as well as tight upper and lower bounds
  • Applying the information-theoretic and adversary techniques to prove upper and lower bounds of computational problems

Module 7:

Linear Programming

Formulate and solve linear programming (LP) problems, including:

  • Exploring LP solutions for the min-cut max-flow and the operations research problems
  • Applying LP algorithms, such as the Simplex algorithm

Module 3:

Greedy Algorithms

Learn when to apply greedy algorithms, which are designed for rapid optimization, including:

  • Explaining what a greedy algorithm is and how to design such algorithms
  • Proving the optimality of greedy algorithms

Module 8:

NP-Completeness

Understand the concepts of P (polynomial time problems) and NP, a wider class of problems that are potentially intractable, including:

  • Proving a problem is NP-complete
  • Developing approximation algorithms to solve NP-complete problems

Module 4:

Dynamic Programming

Learn dynamic programming algorithms and explore their real-world applications, including:

  • Developing and implementing dynamic programming
  • Comparing the bottom-up and the top-down approaches to dynamic programming.

Module 9:

Multiplicative Weights Algorithms

Learn to formulate multiplicative weights algorithms (frequently used in prediction, learning, and optimization systems) and prove their correctness, including:

  • Using the multiplicative weights framework to solve problems
  • Proving the correctness of multiplicative weight algorithms

Module 5:

Hashing and Streaming

Explore data structures, such as hash tables and data streams, and apply them to solve computational problems, including:

  • Examining the properties of hashing and applying it to the dynamic dictionary problems
  • Using hashing to solve problems on data streams

Module 10:

Gradient Descent

Learn the definition, core concepts, and applications of gradient descent (GD)—a method commonly used to solve optimization and machine learning problems, including:

  • Examining the fundamentals of the GD framework and convexity
  • Implementing GD algorithms to solve convex optimization problems
Download Brochure

Program Experience

Decorative image relating to a set of cog machinery

Try-it Activities

Decorative image relating to a person speaking through a speech bubble

Live Office Hours

Decorative image relating to a screen representing a figure communicating through a television screen

Live Session With CMU Faculty

Decorative image relating to a light bulb representing thinking in an instant

Knowledge Checks

Decorative image relating to an Organogram representing people

Discussion Board Activities

Decorative image relating to an assignment on Paper

Programming Assignments

Who Should Attend

This program is designed for anyone with a STEM or computer science background who would like an in-depth understanding of general computational problems and their algorithms, as well as the data structures that support them. It focuses on the core principles used to design algorithms, prove their correctness, and analyze their complexity. By completing the program, you will add a valuable credential attesting to your understanding of real-world applications of algorithms and data structures. The program is particularly suitable for:

  • Early-career technology grads who would like to build their skills in a way that has a practical application in the jobs marketplace.
  • Software engineers and other technology professionals who want a hands-on understanding of advanced algorithms and data structures.

Program Faculty

Faculty Member David P. Woodruff

David P. Woodruff

Associate Professor, Department of Computer Science, Carnegie Mellon University

David Woodruff is an associate professor in CMU's Computer Science Department. A recipient of the 2021 Herbert Simon Award for Teaching Excellence in Computer Science, he has taught algorithm programs since joining CMU in 2017... More info

Faculty Member Anupam Gupta

Anupam Gupta

Professor, Department of Computer Science, Carnegie Mellon University

Anupam Gupta is a professor in CMU's Computer Science Department. He taught Graduate Algorithms at CMU in the Spring 2021 semester. He is recipient of the 2019 Herbert Simon Award for Teaching Excellence in Computer Science... More info

Certificate

Example image of certificate that will be awarded after successful completion of this program

Certificate

Upon successful completion of the program, participants will receive a verified digital certificate of completion from Carnegie Mellon University's School of Computer Science Executive Education. Participants must complete 60 percent of the required activities including a capstone project (if any) to obtain the certificate of completion.

Download Brochure

Your digital certificate will be issued in your legal name and emailed to you at no additional cost, upon completion of the program, per the stipulated requirements. All certificate images are for illustrative purposes only and may be subject to change at the discretion of Carnegie Mellon University's School of Computer Science Executive Education.

Apply Now

Early registrations are encouraged. Seats fill up quickly!

Flexible payment options available. Learn more.