Courses
Log inSign up

Algorithmic Thinking

Master the fundamentals of designing algorithms, the key to solving problems with computers.

22 Lessons44 Practice

The Scheduling Problem

Solving Instances

Describing Algorithms

Multiple Solutions

Identifying Invariants

Finding Counterexamples

Adapting to New Criteria

Testing Algorithms

Modifying an Algorithm

Controlling Order

Verifying Correctness

Finding an Algorithm's Limits

Updating a Strategy

Proving Incorrectness

Updating an Algorithm

Reasoning about Criteria

Testing the Strategy

Optimizing

Crafting Counterexamples

Greedy Optimization

Optimal Substructures

Problem Equivalence

Up next

Computer Science Fundamentals

Learn how to make a computer do what you want, elegantly and efficiently.

Jump ahead

Course description

This course will help you start thinking like a computer scientist. You'll work through instances of a problem and convert mental strategies into algorithms. Through a sequence of scheduling puzzles, you'll explore how different problem constraints lead to different greedy strategies — and when those strategies fail. You'll be introduced to formal tools like loop invariants and counterexamples gradually, to help you build the habits of algorithmic reasoning from the ground up.


Topics covered

  • Instances of a Problem
  • Greedy Algorithms
  • Multiple Solutions
  • Loop Invariants
  • Counterexamples
  • Describing Algorithms
  • Modifying Algorithms
  • Reasoning about Correctness
  • Reasoning about Incorrectness
  • Optimization
  • Greedy Choice Property
  • Optimal Substructure
  • Problem Equivalence

Prerequisites and next steps

This is a great course if you're comfortable with the basics of programming in pseudocode, including variables, loops, lists, and conditional statements. No prior knowledge of algorithms or data structures is assumed. Use this course to develop your ability to confidently design algorithms that correctly solve problems.