We may earn an affiliate commission when you visit our partners.
Course image
Charles Brubaker, Lance Fortnow, and Hariharan Venkateswaran

Sign up for Udacity's free Computability, Complexity & Algorithms course and learn how the power of algorithms helps us develop tools to make computers smarter, faster and safer.

What's inside

Syllabus

1. Languages & Countability
2. Turing Machines
3. Church-Turing Thesis
4. Universality
Read more
5. Undecidability
6. P and NP
7. NP - Completeness
8. NPC Problems
9. Dynamic Programming
10. FFT
11. Maximum Flow
12. BP Matching
13. Linear Programming
14. Duality
15. Approximation Algorithms
16. Randomized Algorithms
Assorted Exercises

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Suitable for those wishing to strengthen an existing foudnation for intermediate learners
Builds a strong foundation for beginners
Taught by Charles Brubaker, Lance Fortnow, and Hariharan Venkateswaran, who are recognized experts in the field

Save this course

Save Computability, Complexity & Algorithms to your list so you can find it easily later:
Save

Reviews summary

Upper level fun

Based on this one review, students are having a great time in this course. However, more reviews are needed.

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Computability, Complexity & Algorithms with these activities:
Compile a list of online resources on Computability, Complexity, and Algorithms
Create a curated list of online resources, tutorials, and tools to enhance your learning and stay updated on the latest developments in the field.
Browse courses on Resources
Show steps
  • Search for relevant resources on the internet
  • Evaluate and select high-quality resources
  • Organize and document the resources
Review Turing Machine concepts
Refresh your knowledge of Turing Machine concepts before starting the course to strengthen your understanding of the foundation.
Browse courses on Formal Languages
Show steps
  • Re-read chapters on Turing Machines from an introductory textbook
  • Review online resources and tutorials on Turing Machines
  • Solve practice problems involving Turing Machines
Read 'Introduction to Automata Theory, Languages, and Computation' by Hopcroft, Ullman, and Motwani
Complement your understanding of course material by reading this classic textbook, which provides a comprehensive overview of automata theory, languages, and computation.
Show steps
  • Read the assigned chapters and take notes
  • Work through the practice exercises and problems
  • Discuss the concepts with classmates or online forums
Nine other activities
Expand to see all activities and additional details
Show all 12 activities
Attend a peer session on P versus NP
Engage with peers to discuss the open problem of P versus NP. This will allow you to exchange ideas, clarify concepts, and gain a deeper understanding of the ongoing research in this area.
Browse courses on Algorithms
Show steps
  • Find a peer session or study group focused on P versus NP.
  • Attend the session and actively participate in discussions.
  • Share your own insights and questions.
Form a study group with classmates
Join or form a study group to discuss course material, work on assignments together, and provide mutual support.
Browse courses on Collaboration
Show steps
  • Find classmates with similar interests and goals
  • Establish regular meeting times and locations
  • Set clear expectations and roles for each member
Practice Turing Machine exercises
Practice exercises on creating and analyzing Turing machines to solidify your understanding of their operation and capabilities.
Browse courses on Turing Machines
Show steps
  • Solve Turing Machine exercises from textbooks or online resources.
  • Create your own Turing Machines to perform specific tasks.
  • Analyze the behavior and limitations of Turing Machines.
Follow tutorials on FFT algorithms
Enhance your understanding of FFT algorithms by following guided tutorials that provide step-by-step instructions and examples, ensuring a thorough grasp of their implementation and applications.
Show steps
  • Search for reputable online tutorials on FFT algorithms.
  • Follow the tutorials, taking notes and practicing the concepts.
  • Attempt exercises or quizzes to test your understanding.
  • Implement an FFT algorithm in a programming language to solidify your knowledge.
Practice solving P and NP problems
Regularly practice solving P and NP problems to improve your problem-solving abilities and deepen your understanding of complexity theory.
Show steps
  • Solve problems from online coding platforms (e.g., LeetCode, HackerRank)
  • Participate in coding challenges and competitions
  • Review solutions and explanations for solved problems
Design a blog post on NP-Completeness
Create a blog post that explains NP-Completeness in a clear and concise manner, covering its definition, significance, and real-world applications.
Browse courses on NP-Completeness
Show steps
  • Research NP-Completeness and gather relevant information.
  • Organize your thoughts into a logical outline.
  • Write a draft of the blog post, explaining the concepts of NP-Completeness.
  • Revise and edit your blog post, ensuring clarity and accuracy.
  • Publish your blog post and share it with the community.
Build a dynamic programming algorithm
Develop a project that involves building a dynamic programming algorithm to enhance your understanding of algorithm design and implementation.
Browse courses on Dynamic programming
Show steps
  • Choose a problem that can be solved using dynamic programming
  • Design and implement the algorithm
  • Test and debug the algorithm
  • Analyze the performance and efficiency of the algorithm
Develop a Dynamic Programming algorithm to optimize a real-world scenario
Apply your understanding of Dynamic Programming by designing and implementing an algorithm to solve a practical optimization problem, such as finding the shortest path in a network or optimizing a scheduling algorithm.
Browse courses on Dynamic programming
Show steps
  • Identify a suitable real-world problem that can be solved using Dynamic Programming.
  • Design and analyze the Dynamic Programming algorithm for the problem.
  • Implement the algorithm in a programming language.
  • Test and evaluate the performance of your algorithm.
  • Present your findings and discuss the strengths and limitations of your approach.
Follow online tutorials on advanced topics in Computability and Complexity
Explore advanced topics in Computability and Complexity by following online tutorials and courses.
Browse courses on Online Learning
Show steps
  • Identify areas of interest for further exploration
  • Search for relevant online tutorials and courses
  • Complete the tutorials and assignments

Career center

Learners who complete Computability, Complexity & Algorithms will develop knowledge and skills that may be useful to these careers:
Computer Scientist
Computer Scientists research and develop new computer technologies. They work in a variety of fields, including artificial intelligence, machine learning, and data science. The Computability, Complexity & Algorithms course provides a deep understanding of the theoretical foundations of computer science, which is essential for any aspiring Computer Scientist.
Software Engineer
Software Engineers design, develop, and maintain computer software. They are essential to the development of software in a wide range of industries, including artificial intelligence, machine learning, and financial services. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Software Engineer.
Machine Learning Engineer
Machine Learning Engineers design, develop, and maintain machine learning models. They work in a variety of industries, including healthcare, finance, and manufacturing. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of machine learning, which is essential for any aspiring Machine Learning Engineer.
Operations Research Analyst
Operations Research Analysts use mathematical and statistical models to solve business problems. They work in a variety of industries, including manufacturing, logistics, and healthcare. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Operations Research Analyst.
Database Administrator
Database Administrators design, develop, and maintain databases. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Database Administrator.
Network Administrator
Network Administrators design, develop, and maintain computer networks. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Network Administrator.
Product Manager
Product Managers plan, develop, and launch new products. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Product Manager.
Quantitative Analyst
Quantitative Analysts use mathematical and statistical models to analyze financial data. They work in a variety of industries, including investment banking, hedge funds, and asset management. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Quantitative Analyst.
IT Manager
IT Managers plan, organize, and manage the IT department of an organization. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring IT Manager.
Technical Writer
Technical Writers create documentation for software and hardware products. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Technical Writer.
Systems Analyst
Systems Analysts design, develop, and maintain computer systems. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Systems Analyst.
Management Consultant
Management Consultants advise businesses on how to improve their performance. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Management Consultant.
Security Analyst
Security Analysts design, develop, and maintain security systems. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Security Analyst.
Data Scientist
Data Scientists use data to solve business problems. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Data Scientist.
Business Analyst
Business Analysts analyze business processes and systems to identify areas for improvement. They work in a variety of industries, including healthcare, finance, and retail. The Computability, Complexity & Algorithms course provides a strong foundation in the theoretical underpinnings of computer science, which is essential for any aspiring Business Analyst.

Reading list

We've selected 13 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Computability, Complexity & Algorithms.
Classic work on computer programming, covering topics such as algorithms, data structures, and numerical methods. It would be a valuable reference for students who want to learn more about the art and science of computer programming.
Classic work on algorithms, covering topics such as sorting, searching, and graph algorithms. It would be a valuable reference for students who want to learn more about the design and analysis of algorithms.
Provides a comprehensive introduction to computability and complexity theory, covering topics such as Turing machines, undecidability, and NP-completeness. It would be a valuable reference for students who want to learn more about the theoretical foundations of computer science.
Provides a comprehensive introduction to automata theory, languages, and computation, covering topics such as finite automata, pushdown automata, and Turing machines. It would be a valuable reference for students who want to learn more about the theoretical foundations of computer science.
Provides a comprehensive introduction to the theory of computation, covering topics such as Turing machines, computability, and complexity theory. It would be a valuable reference for students who want to learn more about the theoretical foundations of computer science.
Provides a comprehensive introduction to algorithms, using a visual approach to explain complex concepts. It would be a valuable resource for students who want to learn more about the art and science of algorithm design.
Provides a comprehensive introduction to algorithms, covering topics such as data structures, algorithms, and complexity analysis. It would be a valuable resource for students who want to learn more about the art and science of algorithm design.
Provides a comprehensive introduction to data structures and algorithms, using Python as the programming language. It would be a valuable reference for students who want to learn more about the design and implementation of data structures and algorithms.
Provides a comprehensive introduction to data structures and algorithms, using Java as the programming language. It would be a valuable reference for students who want to learn more about the design and implementation of data structures and algorithms.
Provides a collection of programming challenges, covering a wide range of topics in computer science. It would be a valuable resource for students who want to practice their programming skills and learn more about the art and science of computer programming.
Provides a comprehensive guide to preparing for coding interviews, covering topics such as data structures, algorithms, and system design. It would be a valuable resource for students who are preparing for job interviews in the tech industry.
Provides a comprehensive guide to algorithm design, covering topics such as data structures, algorithms, and complexity analysis. It would be a valuable resource for students who want to learn more about the art and science of algorithm design.
Provides a foundation in discrete mathematics, covering topics such as sets, logic, and combinatorics. It would be a valuable reference for students who want to learn more about the mathematical foundations of computer science.

Share

Help others find this course page by sharing it with your friends and followers:
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser