Intro to Theoretical Computer Science (Udacity)

Offered by Udacity,
Intro to Theoretical Computer Science (Udacity)

Dealing with Challenging Problems. This class teaches you about basic concepts in theoretical computer science -- such as NP-completeness -- and what they imply for solving tough algorithmic problems.

Class Deals by MOOC List - Click here and see Udacity's Active Discounts, Deals, and Promo Codes.

At the end of this course, you will have a solid understanding of theoretical computer science. This will not only allow you to recognize some of the most challenging algorithmic problems out there, but also give you powerful tools to deal with them in practice.

What You Will Learn

Lesson 1
Challenging Problems

  • An introduction to tough problems and their analysis.

Lesson 2
Understanding Hardness

  • What we mean when a problem is "hard" and the concept of NP-completeness.

Lesson 3
Showing Hardness

  • Tools to let you recognize and prove that a problem is hard.

Lesson 4
Intelligent Force

  • Smart techniques to solve problems that should – theoretically – be impossible to solve.

Lesson 5
Sloppy Solutions

  • Gaining speed by accepting approximate solutions.

Lesson 6
Poking Around

  • Why randomness can be of help – sometimes. An introduction to complexity classes.

Lesson 7
Ultimate Limits

  • Problems that no computer can ever solve. In theory.

Prerequisites and Requirements
You should have a basic understanding of algorithms (such as Intro to Algorithms) and programming (such as Introduction to Python Programming). No prior knowledge about theoretical computer science required!

Go to Class
MOOC List is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

Related Courses

Website Performance Optimization (Udacity) Udacity
Udacity,Google

Website Performance Optimization (Udacity)

The Critical Rendering Path. You will learn how to optimize any website for speed by diving into the details of how mobile and desktop browsers render pages. In this short course, you’ll learn about the Critical Rendering Path, or the set of steps browsers must take to convert HTML, CSS and JavaScript into living, breathing websites. From there, you’ll start exploring and experimenting with tools to measure performance and simple strategies to deliver the first pixels to the screen as early as possible.

Self Paced
Self-Paced
操作系统原理 (Operating Systems) (Coursera) Coursera
Peking University

操作系统原理 (Operating Systems) (Coursera)

操作系统原理》是针对计算机科学技术专业三年级本科生开设的一门专业基础课程。本课程着重学生系统观的培养,通过重点讲述操作系统的内部结构、工作原理及典型技术的实现,使学生建立起对操作系统的整体及各个功能模块的认识,从而系统掌握计算机的专业知识,进一步提升学生的软件开发能力乃至系统软件开发能力。

Sep 28th 2026
13-24 Weeks
High Performance Computing (Udacity) Udacity
Georgia Institute of Technology,Udacity

High Performance Computing (Udacity)

The goal of this course is to give you solid foundations for developing, analyzing, and implementing parallel and locality-efficient algorithms. This course focuses on theoretical underpinnings. To give a practical feeling for how algorithms map to and behave on real systems, we will supplement algorithmic theory with hands-on exercises on modern HPC systems, such as Cilk Plus or OpenMP on shared memory nodes, CUDA for graphics co-processors (GPUs), and MPI and PGAS models for distributed memory systems.

Self Paced
Self-Paced
Analysis of Algorithms (Coursera) Coursera
Princeton University

Analysis of Algorithms (Coursera)

This course teaches a calculus that enables precise quantitative predictions of large combinatorial structures. In addition, this course covers generating functions and real asymptotics and then introduces the symbolic method in the context of applications in the analysis of algorithms and basic structures such as permutations, trees, strings, words, and mappings.

Sep 28th 2026
5-12 Weeks
Server-Side Swift (Udacity) Udacity
Udacity

Server-Side Swift (Udacity)

Production-Ready Swift in the Cloud. In this course, built in collaboration with IBM and Hashicorp, you'll learn how to build server-side Swift applications that run on Linux and in the cloud, including how to use Swift to build a microservices backend. This course covers the best practices for constructing and deploying server-side Swift using industry-proven tools like Docker and Terraform.

Self Paced
Self-Paced
Computability, Complexity & Algorithms (Udacity) Udacity
Georgia Institute of Technology,Udacity

Computability, Complexity & Algorithms (Udacity)

The Power and Limitation of Algorithms. In this course, we will ask the big questions, "What is a computer? What are the limits of computation? Are there problems that no computer will ever solve? Are there problems that can’t be solved quickly? What kinds of problems can we solve efficiently and how do we go about developing these algorithms?" Understanding the power and limitations of algorithms helps us develop the tools to make real-world computers smarter, faster and safer.

Self Paced
Self-Paced
Swift for Developers (Udacity) Udacity
Udacity

Swift for Developers (Udacity)

Your Next Programming Language. This course offers a quick practical introduction to Swift basics, including types, variables, constants, and functions. It combines syntax exercises with hands-on iOS development in Xcode. By the end of the course students will build their first iOS app, an app that creates and displays song lyrics customized to user input.

Self Paced
Self-Paced
JavaScript Design Patterns (Udacity) Udacity
Udacity

JavaScript Design Patterns (Udacity)

Organizing Code in a Disorganized World. This course covers methods for organizing your code, both conceptually and literally. You’ll learn the importance of separating concerns when writing JavaScript, gaining hands-on experience along the way. Separating concerns can be done with or without an organizational library or framework. We’ll learn how to separate concerns without one, and then we’ll explore an organizational library together. You’ll also learn strategies for exploring other libraries and frameworks on your own.

Self Paced
Self-Paced
Object Oriented Programming in Java (Udacity) Udacity
Udacity

Object Oriented Programming in Java (Udacity)

Build Interactive Java Programs. This course will introduce you to some of the most powerful programming concepts in Java, including: objects, inheritance and collections. You will learn how to use these object-oriented programming concepts in code examples, discover how these concepts are used in applications that require user input, and understand the benefits of mastering these concepts in Java.

Self Paced
Self-Paced
Kotlin for Android Developers (Udacity) Udacity
Udacity

Kotlin for Android Developers (Udacity)

Convert an Android app from Java to Kotlin. In this course, Aaron Sarazan, Lead Software Engineer at Capital One and a leading advocate for Kotlin, demonstrates how to take a basic Android app in Java and convert it to Kotlin, teaching you key features of the Kotlin programming language along the way. This is an efficient, fast-paced introduction to Kotlin for experienced Java programmers.

Self Paced
Self-Paced