We may earn an affiliate commission when you visit our partners.
Course image
Alexander S. Kulikov, Michael Levin, Daniel M Kane, and Neil Rhodes

In previous courses of our online specialization you've learned the basic algorithms, and now you are ready to step into the area of more complex problems and algorithms to solve them. Advanced algorithms build upon basic ones and use new ideas. We will start with networks flows which are used in more typical applications such as optimal matchings, finding disjoint paths and flight scheduling as well as more surprising ones like image segmentation in computer vision. We then proceed to linear programming with applications in optimizing budget allocation, portfolio optimization, finding the cheapest diet satisfying all requirements and many others. Next we discuss inherently hard problems for which no exact good solutions are known (and not likely to be found) and how to solve them in practice. We finish with a soft introduction to streaming algorithms that are heavily used in Big Data processing. Such algorithms are usually designed to be able to process huge datasets without being able even to store a dataset.

Enroll now

What's inside

Syllabus

Flows in Networks
Network flows show up in many real world situations in which a good needs to be transported across a network with limited capacity. You can see it when shipping goods across highways and routing packets across the internet. In this unit, we will discuss the mathematical underpinnings of network flows and some important flow algorithms. We will also give some surprising examples on seemingly unrelated problems that can be solved with our knowledge of network flows.
Read more
Linear Programming
Linear programming is a very powerful algorithmic tool. Essentially, a linear programming problem asks you to optimize a linear function of real variables constrained by some system of linear inequalities. This is an extremely versatile framework that immediately generalizes flow problems, but can also be used to discuss a wide variety of other problems from optimizing production procedures to finding the cheapest way to attain a healthy diet. Surprisingly, this very general framework admits efficient algorithms. In this unit, we will discuss some of the importance of linear programming problems along with some of the tools used to solve them.
NP-complete Problems
Although many of the algorithms you've learned so far are applied in practice a lot, it turns out that the world is dominated by real-world problems without a known provably efficient algorithm. Many of these problems can be reduced to one of the classical problems called NP-complete problems which either cannot be solved by a polynomial algorithm or solving any one of them would win you a million dollars (see Millenium Prize Problems) and eternal worldwide fame for solving the main problem of computer science called P vs NP. It's good to know this before trying to solve a problem before the tomorrow's deadline :) Although these problems are very unlikely to be solvable efficiently in the nearest future, people always come up with various workarounds. In this module you will study the classical NP-complete problems and the reductions between them. You will also practice solving large instances of some of these problems despite their hardness using very efficient specialized software based on tons of research in the area of NP-complete problems.
Coping with NP-completeness
After the previous module you might be sad: you've just went through 5 courses in Algorithms only to learn that they are not suitable for most real-world problems. However, don't give up yet! People are creative, and they need to solve these problems anyway, so in practice there are often ways to cope with an NP-complete problem at hand. We first show that some special cases on NP-complete problems can, in fact, be solved in polynomial time. We then consider exact algorithms that find a solution much faster than the brute force algorithm. We conclude with approximation algorithms that work in polynomial time and find a solution that is close to being optimal.
Streaming Algorithms (Optional)
In most previous lectures we were interested in designing algorithms with fast (e.g. small polynomial) runtime, and assumed that the algorithm has random access to its input, which is loaded into memory. In many modern applications in big data analysis, however, the input is so large that it cannot be stored in memory. Instead, the input is presented as a stream of updates, which the algorithm scans while maintaining a small summary of the stream seen so far. This is precisely the setting of the streaming model of computation, which we study in this lecture. The streaming model is well-suited for designing and reasoning about small space algorithms. It has received a lot of attention in the literature, and several powerful algorithmic primitives for computing basic stream statistics in this model have been designed, several of them impacting the practice of big data analysis. In this lecture we will see one such algorithm (CountSketch), a small space algorithm for finding the top k most frequent items in a data stream.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Provides a thorough foundation for intermediate learners in the field of algorithms
Delves into advanced algorithms, which are essential for solving complex problems
Taught by reputable instructors with expertise in advanced algorithms
Covers topics such as network flows and linear programming, which are highly relevant in industry
Introduces streaming algorithms commonly used in data analysis

Save this course

Save Advanced Algorithms and Complexity to your list so you can find it easily later:
Save

Reviews summary

Complex algorithms course

Learners say despite its difficulty, this course is a great course that is well worth it if learners are dedicated to learning and understanding advanced algorithms and computational complexity.
This course is a great course and worth the effort.
"This course is challenging, but it worth it!"
"This is a great course that has helped me to understand complex algorithms and computational complexity."
This is a challenging course.
"This course is quite difficult."
"Be prepared for long hours, and a lot of learning."

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 Advanced Algorithms and Complexity with these activities:
Read 'Introduction to Algorithms' by Thomas H. Cormen et al.
Gain a comprehensive understanding of the fundamental algorithms and data structures.
Show steps
  • Purchase or borrow the book
  • Read and study the chapters relevant to the course
  • Complete the exercises and practice problems
Review linear algebra and calculus
Understand the mathematical foundations of the course.
Browse courses on Linear Algebra
Show steps
  • Review a university textbook
  • Complete practice problems
  • Take an online practice test
Form a study group with classmates
Collaborate with peers to enhance understanding and learn from different perspectives.
Show steps
  • Reach out to classmates
  • Set up regular meeting times
  • Discuss the course material, ask questions, and solve problems together
Four other activities
Expand to see all activities and additional details
Show all seven activities
Follow a video tutorial series on network flows
Gain a deeper understanding of network flows.
Browse courses on Network Flows
Show steps
  • Find a tutorial series on network flows
  • Follow along with the tutorials
  • Take notes and ask questions
Solve practice problems on linear programming
Practice and improve your skills in solving linear programming problems.
Browse courses on Linear Programming
Show steps
  • Find a resource with practice problems
  • Attempt a few problems yourself
  • Check your solutions against the provided answers
Create a cheat sheet on NP-complete problems
Reinforce your knowledge of the key concepts and algorithms related to NP-complete problems.
Browse courses on NP-Complete Problems
Show steps
  • Gather your notes and resources
  • Organize the information into a concise and visually appealing format
  • Reference your cheat sheet during your studies
Contribute to an open-source project related to streaming algorithms
Gain hands-on experience with streaming algorithms and contribute to the community.
Show steps
  • Find an open-source project on Github or a similar platform
  • Identify an area where you can contribute
  • Make a pull request with your changes

Career center

Learners who complete Advanced Algorithms and Complexity will develop knowledge and skills that may be useful to these careers:
Applied Mathematician
Applied Mathematicians use mathematical techniques to solve problems in a variety of fields. They use a variety of techniques and tools to develop models and make recommendations that can help organizations solve problems. Network flows, linear programming, and NP-complete problems are all important techniques in applied mathematics, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Applied Mathematicians with a strong foundation in these techniques. The course may also be helpful for Applied Mathematicians who wish to develop new algorithms and methods for applied mathematics.
Computer Scientist
Computer Scientists research and develop new computer technologies. They use a variety of techniques and tools to create new algorithms and methods for solving problems. Network flows, linear programming, and NP-complete problems are all important techniques in computer science, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Computer Scientists with a strong foundation in these techniques. The course may also be helpful for Computer Scientists who wish to develop new algorithms and methods for computer science.
Operations Research Analyst
Operations Research Analysts use mathematical and analytical techniques to solve problems in a variety of industries. They use a variety of techniques and tools to develop models and make recommendations that can help organizations improve their operations. Network flows, linear programming, and NP-complete problems are all important techniques in operations research, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Operations Research Analysts with a strong foundation in these techniques. The course may also be helpful for Operations Research Analysts who wish to develop new algorithms and methods for operations research.
Quantitative Analyst
Quantitative Analysts use mathematical and statistical techniques to analyze and evaluate financial data. They use a variety of techniques and tools to develop models and make recommendations that can help organizations make investment decisions. Network flows, linear programming, and NP-complete problems are all important techniques in quantitative analysis, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Quantitative Analysts with a strong foundation in these techniques. The course may also be helpful for Quantitative Analysts who wish to develop new algorithms and methods for quantitative analysis.
Machine Learning Engineer
Machine Learning Engineers design, build, and maintain machine learning models. They use a variety of techniques and tools to develop models that can learn from data and make predictions. Network flows, linear programming, and NP-complete problems are all important techniques in machine learning, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Machine Learning Engineers with a strong foundation in these techniques. The course may also be helpful for Machine Learning Engineers who wish to develop new algorithms and methods for machine learning.
Financial Analyst
Financial Analysts use mathematical and financial techniques to analyze and evaluate investments. They use a variety of techniques and tools to develop models and make recommendations that can help organizations make investment decisions. Network flows, linear programming, and NP-complete problems are all important techniques in financial analysis, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Financial Analysts with a strong foundation in these techniques. The course may also be helpful for Financial Analysts who wish to develop new algorithms and methods for financial analysis.
Data Scientist
Data Scientists are responsible for analyzing data, building models, and making predictions to help organizations make informed decisions. They use a variety of techniques and tools to extract insights from data, including network flows, linear programming, and NP-complete problems. The Advanced Algorithms and Complexity course from University of California, San Diego can provide Data Scientists with a strong foundation in these techniques, as well as the ability to solve complex problems efficiently. The course may also be helpful for Data Scientists who wish to develop new algorithms and methods for data analysis.
Actuary
Actuaries use mathematical and statistical techniques to assess risk and uncertainty. They use a variety of techniques and tools to develop models and make recommendations that can help organizations manage risk. Network flows, linear programming, and NP-complete problems are all important techniques in actuarial science, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Actuaries with a strong foundation in these techniques. The course may also be helpful for Actuaries who wish to develop new algorithms and methods for actuarial science.
Risk Manager
Risk Managers use mathematical and statistical techniques to assess and manage risk. They use a variety of techniques and tools to develop models and make recommendations that can help organizations mitigate risk. Network flows, linear programming, and NP-complete problems are all important techniques in risk management, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Risk Managers with a strong foundation in these techniques. The course may also be helpful for Risk Managers who wish to develop new algorithms and methods for risk management.
Market Researcher
Market Researchers use mathematical and statistical techniques to analyze and understand consumer behavior. They use a variety of techniques and tools to develop models and make recommendations that can help organizations develop marketing campaigns and products. Network flows, linear programming, and NP-complete problems are all important techniques in market research, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Market Researchers with a strong foundation in these techniques. The course may also be helpful for Market Researchers who wish to develop new algorithms and methods for market research.
Database Administrator
Database Administrators manage and maintain databases. They use a variety of techniques and tools to ensure that databases are available and performant. Network flows, linear programming, and NP-complete problems are all important techniques in database administration, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Database Administrators with a strong foundation in these techniques. The course may also be helpful for Database Administrators who wish to develop new algorithms and methods for database administration.
Computer Programmer
Computer Programmers design, develop, and maintain computer programs. They use a variety of techniques and tools to create programs that meet the needs of organizations. Network flows, linear programming, and NP-complete problems are all important techniques in computer programming, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Computer Programmers with a strong foundation in these techniques. The course may also be helpful for Computer Programmers who wish to develop new algorithms and methods for computer programming.
Data Architect
Data Architects design and manage data systems. They use a variety of techniques and tools to create data systems that meet the needs of organizations. Network flows, linear programming, and NP-complete problems are all important techniques in data architecture, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Data Architects with a strong foundation in these techniques. The course may also be helpful for Data Architects who wish to develop new algorithms and methods for data architecture.
Systems Analyst
Systems Analysts design and implement computer systems. They use a variety of techniques and tools to create systems that meet the needs of organizations. Network flows, linear programming, and NP-complete problems are all important techniques in systems analysis, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Systems Analysts with a strong foundation in these techniques. The course may also be helpful for Systems Analysts who wish to develop new algorithms and methods for systems analysis.
Software Engineer
Software Engineers design, develop, and maintain software applications. They use a variety of techniques and tools to create software that meets the needs of users. Network flows, linear programming, and NP-complete problems are all important techniques in software engineering, and the Advanced Algorithms and Complexity course from University of California, San Diego can provide Software Engineers with a strong foundation in these techniques. The course may also be helpful for Software Engineers who wish to develop new algorithms and methods for software development.

Reading list

We've selected 12 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 Advanced Algorithms and Complexity.
Provides a comprehensive overview of algorithms and data structures, with a focus on efficiency and correctness. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
This classic textbook provides a comprehensive introduction to algorithms, data structures, and their applications. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a practical guide to algorithm design, with a focus on problem-solving techniques and code optimization. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of network flows, with a focus on theory, algorithms, and applications. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of linear programming, with a focus on theory and algorithms. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of convex optimization, with a focus on theory and algorithms. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of machine learning, with a focus on theory and algorithms. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of data mining, with a focus on concepts and techniques. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of big data analytics, with a focus on a practical approach to solving big data problems. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of deep learning, with a focus on theory and algorithms. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of reinforcement learning, with a focus on theory and algorithms. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.
Provides a comprehensive overview of pattern recognition and machine learning, with a focus on theory and algorithms. It valuable resource for students and practitioners alike, and it can serve as a reference or textbook for the course.

Share

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

Similar courses

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