We may earn an affiliate commission when you visit our partners.
Course image
Luay Nakhleh, Scott Rixner, and Joe Warren

Experienced Computer Scientists analyze and solve computational problems at a level of abstraction that is beyond that of any particular programming language. This two-part course builds on the principles that you learned in our Principles of Computing course and is designed to train students in the mathematical concepts and process of "Algorithmic Thinking", allowing them to build simpler, more efficient solutions to real-world computational problems.

Read more

Experienced Computer Scientists analyze and solve computational problems at a level of abstraction that is beyond that of any particular programming language. This two-part course builds on the principles that you learned in our Principles of Computing course and is designed to train students in the mathematical concepts and process of "Algorithmic Thinking", allowing them to build simpler, more efficient solutions to real-world computational problems.

In part 1 of this course, we will study the notion of algorithmic efficiency and consider its application to several problems from graph theory. As the central part of the course, students will implement several important graph algorithms in Python and then use these algorithms to analyze two large real-world data sets. The main focus of these tasks is to understand interaction between the algorithms and the structure of the data sets being analyzed by these algorithms.

Recommended Background - Students should be comfortable writing intermediate size (300+ line) programs in Python and have a basic understanding of searching, sorting, and recursion. Students should also have a solid math background that includes algebra, pre-calculus and a familiarity with the math concepts covered in "Principles of Computing".

Enroll now

What's inside

Syllabus

Module 1 - Core Materials
What is Algorithmic Thinking?, class structure, graphs, brute-force algorithms
Modules 1 - Project and Application
Graph representations, plotting, analysis of citation graphs
Read more
Module 2 - Core Materials
Asymptotic analysis, "big O" notation, pseudocode, breadth-first search
Module 2 - Project and Application
Connected components, graph resilience, and analysis of computer networks

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Prepares learners to approach computational problems with more ease and confidence
Incorporates the implementation of several important graph algorithms in Python, building learners' proficiency in a widely used programming language
Utilizes graph algorithms to analyze real-world data sets, allowing learners to apply their knowledge to practical challenges
Assumes familiarity with searching, sorting, and recursion, indicating the course is designed for learners with some programming background

Save this course

Save Algorithmic Thinking (Part 1) to your list so you can find it easily later:
Save

Reviews summary

Comprehensive algorithmic thinking foundation

Learners largely agree that this challenging Algorithmic Thinking course provides a strong foundation for beginners and those looking to refresh their knowledge of algorithms. They say that the course is well-structured and covers a range of important topics that will help learners think algorithmically in their own projects.

Students mention that the engaging assignments help them practice their skills and apply their knowledge. However, some learners recommend adding more real-life examples and illustrations to make the course more accessible.
Assignments help solidify learning and prepare you to apply your knowledge.
"The course is split into several two-week long components, during which you will have to complete a quiz and a machine-graded piece of code."
"The teaching style was great, and I enjoyed it very much."
"The programming assignments were a bit difficult sometimes, but enjoyable."
Provides a solid foundation in algorithmic thinking.
"This course is the first part of a somewhat challenging conclusion to the specialization."
"I took this course when it was one course, more than a year ago so some things may have changed since."
"I'm writing this review a bit late, so I believe that the issues have been changed so far."
More practical applications would make the course more approachable.
"Maybe some more examples could be added to illustrate the complexities with real-life algorithms."
Be prepared for a demanding course that will push students.
"not easy by any means, but for sure learned a lot from the hard experience."
"One weakness was treatment of the relevant maths, which was a little sketchy."

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 Algorithmic Thinking (Part 1) with these activities:
Review pre-calculus and algebra
Concepts from pre-calculus and algebra are used heavily throughout the course. Familiarizing yourself with these topics before starting the course can help you grasp the concepts faster and perform better.
Browse courses on Mathematical Foundations
Show steps
  • Take online practice tests
  • Review notes and materials from previous courses
  • Use online resources such as Khan Academy or Coursera
Review the textbook Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein
Reviewing this book will familiarize you with essential concepts and algorithms covered in the course, and provide a deeper understanding of the subject matter.
Show steps
  • Obtain a copy of the textbook
  • Read and understand the chapters corresponding to the course content
  • Take notes and highlight important concepts
  • Solve practice problems from the book
Compile notes and course materials
Compiling notes and materials helps you review the course and ensures you have all the necessary materials for successful learning.
Show steps
  • Identify all the materials provided in this course
  • Identify all the materials provided in the course materials
  • Gather all the materials together
  • Find a method to keep all of these materials in one organized place
Five other activities
Expand to see all activities and additional details
Show all eight activities
Form study groups with classmates
Studying with peers can help you understand the concepts better, motivate you to stay on track, and provide a support system for learning.
Show steps
  • Find classmates who are interested in forming a study group
  • Set up regular meeting times and locations
  • Create a study plan and divide the responsibilities among the group members
  • Meet regularly to discuss the course material, work on assignments together, and prepare for exams
Solve practice problems on graph theory
Solving practice problems will strengthen your understanding of graph theory and algorithms concepts, and help improve your problem-solving skills.
Show steps
  • Identify the topic or concept you want to practice
  • Look for practice problems or exercises related to that topic
  • Try to solve the problems on your own
  • Check your solutions and learn from your mistakes
Explore online tutorials on Asymptotic Analysis and Python
Going through tutorials on Asymptotic Analysis and Python will help you refine your understanding of these key concepts and techniques used in the course.
Browse courses on Asymptotic Analysis
Show steps
  • Identify online tutorials that cover the topics you need to learn
  • Set aside time to go through the tutorials regularly
  • Take notes and practice the concepts and techniques demonstrated in the tutorials
Create a presentation on real-world applications of graph algorithms
Presenting on real-world applications of algorithms will reinforce the concepts and principles learned in the course and deepen your understanding of their practical relevance.
Show steps
  • Choose a real-world application that interests you
  • Research how graph algorithms are used in that application
  • Create a presentation that explains the concepts and their application clearly
  • Practice your presentation and get feedback from peers or instructors
Start a personal project to apply graph algorithms to a real-world problem
Working on a personal project will provide hands-on experience in applying the algorithms and concepts learned in the course to solve real-world problems, deepening your understanding and boosting your portfolio.
Show steps
  • Identify a real-world problem that can be solved using graph algorithms
  • Design and develop an algorithm to solve the problem
  • Implement the algorithm in Python
  • Test and evaluate the solution
  • Write a report or create a presentation to showcase your work

Career center

Learners who complete Algorithmic Thinking (Part 1) will develop knowledge and skills that may be useful to these careers:
Computer Scientist
A Computer Scientist researches and develops new computing technologies. This course in Algorithmic Thinking can help build a foundation for understanding the theoretical foundations of computer science. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all fundamental concepts in computer science. Additionally, the course projects involve implementing graph algorithms in Python, which can provide hands-on experience in computer science research.
Software Engineer
A Software Engineer designs, develops, and maintains software systems. This course in Algorithmic Thinking can help build a foundation for understanding the principles of software design and development. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Software Engineer. Additionally, the course projects involve implementing graph algorithms in Python, which can provide hands-on experience in software development.
Machine Learning Engineer
A Machine Learning Engineer develops and deploys machine learning models. This course in Algorithmic Thinking can help build a foundation for understanding the principles of machine learning. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Machine Learning Engineer. Additionally, the course projects involve implementing graph algorithms in Python, which can provide hands-on experience in machine learning engineering.
Data Scientist
A Data Scientist uses data to solve business problems. This course in Algorithmic Thinking can help build a foundation for understanding how to use data to make informed decisions. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Data Scientist. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in data science.
Data Architect
A Data Architect designs and implements data systems. This course in Algorithmic Thinking can help build a foundation for understanding the principles of data architecture. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Data Architect. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in data architecture.
Systems Analyst
A Systems Analyst designs and implements computer systems. This course in Algorithmic Thinking can help build a foundation for understanding the principles of systems analysis and design. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Systems Analyst. Additionally, the course projects involve implementing graph algorithms in Python, which can provide hands-on experience in systems analysis and design.
Computer Network Architect
A Computer Network Architect designs and implements computer networks. This course in Algorithmic Thinking can help build a foundation for understanding the principles of computer network architecture. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Computer Network Architect. Additionally, the course projects involve implementing graph algorithms in Python, which can provide hands-on experience in computer network architecture.
Data Analyst
A Data Analyst analyzes data to extract meaningful insights and trends. This course in Algorithmic Thinking can help build a foundation for understanding how to analyze data efficiently. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Data Analyst. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in data analysis.
Quantitative Analyst
A Quantitative Analyst uses mathematical and statistical models to analyze financial data. This course in Algorithmic Thinking can help build a foundation for understanding the mathematical and statistical concepts used in quantitative finance. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Quantitative Analyst. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in quantitative finance.
Operations Research Analyst
An Operations Research Analyst uses mathematical and statistical models to solve business problems. This course in Algorithmic Thinking can help build a foundation for understanding the mathematical and statistical concepts used in operations research. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for an Operations Research Analyst. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in operations research.
Information Security Analyst
An Information Security Analyst protects computer systems from unauthorized access and use. This course in Algorithmic Thinking can help build a foundation for understanding the principles of information security. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for an Information Security Analyst. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in information security.
Database Administrator
A Database Administrator manages and maintains databases. This course in Algorithmic Thinking can help build a foundation for understanding the principles of database management. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Database Administrator. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in database management.
Business Analyst
A Business Analyst analyzes business processes and identifies opportunities for improvement. This course in Algorithmic Thinking can help build a foundation for understanding how to analyze business processes efficiently. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Business Analyst. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in business analysis.
Web Developer
A Web Developer designs and develops websites. This course in Algorithmic Thinking can help build a foundation for understanding the principles of web development. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Web Developer. Additionally, the course projects involve implementing graph algorithms in Python, which can provide hands-on experience in web development.
Network Administrator
A Network Administrator manages and maintains computer networks. This course in Algorithmic Thinking can help build a foundation for understanding the principles of network administration. The course covers topics such as asymptotic analysis, pseudocode, and graph algorithms, which are all useful skills for a Network Administrator. Additionally, the course projects involve working with real-world data sets, which can provide hands-on experience in network administration.

Reading list

We've selected 43 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 Algorithmic Thinking (Part 1).
This classic textbook provides a thorough and authoritative treatment of the core principles of algorithms and data structures, offering a solid foundation for this course.
Provides a comprehensive introduction to the fundamental principles and applications of algorithms, with a focus on efficiency and correctness, making it a valuable reference for this course.
Is another classic textbook on algorithms and provides a more in-depth coverage of the material than the previous book.
Provides a comprehensive overview of algorithms, and it includes a number of helpful examples and exercises. It covers a wide range of topics that are relevant to this course, such as graph algorithms, asymptotic analysis, and pseudocode.
Provides a comprehensive overview of algorithm design, and it includes a number of helpful examples and exercises. It covers a wide range of topics that are relevant to this course, such as graph algorithms, asymptotic analysis, and pseudocode.
Provides a comprehensive overview of algorithm design, and it includes a number of helpful examples and exercises. It covers a wide range of topics that are relevant to this course, such as graph algorithms, asymptotic analysis, and pseudocode.
Provides a comprehensive overview of algorithms in Python, and it includes a number of helpful examples and exercises. It covers a wide range of topics that are relevant to this course, such as graph algorithms, asymptotic analysis, and pseudocode.
Focuses specifically on graph algorithms, providing a deep dive into the theoretical foundations and practical applications of graph theory, complementing the graph-related topics covered in this course.
Classic textbook on algorithms and data structures and provides a good foundation for the concepts covered in the course.
Provides a comprehensive coverage of computational complexity.
Provides a comprehensive coverage of machine learning.
Offers a practical approach to data structures and algorithms using Python, providing hands-on experience in implementing and analyzing algorithms, reinforcing the concepts covered in this course.
Provides a concise and accessible introduction to essential algorithms, with a focus on Python implementations. It good choice for students who are interested in learning the basics of algorithms.
Offers a problem-solving approach to algorithms and data structures, providing numerous exercises and case studies to reinforce the concepts covered in this course.
Provides a comprehensive introduction to graph theory, covering both theoretical and practical aspects, offering a deeper understanding of the graph-related topics in this course.
Offers a comprehensive treatment of algorithmic graph theory, providing a deeper understanding of the theoretical foundations and applications of graph algorithms, complementing the practical focus of this course.
Provides a functional programming approach to algorithms, which can be beneficial for understanding the concepts covered in the course.
Popular resource for preparing for coding interviews, and it includes a number of helpful examples and exercises on algorithms and data structures. It is not as comprehensive as some of the other books on this list, but it good resource for students who are looking to brush up on their algorithmic thinking skills.
Is another popular resource for preparing for coding interviews, and it includes a number of helpful examples and exercises on algorithms and data structures. It is not as comprehensive as some of the other books on this list, but it good resource for students who are looking to brush up on their algorithmic thinking skills.
Is another valuable resource for any software developer. It provides guidance on how to write clean, efficient, and maintainable code, and it offers tips on how to avoid common pitfalls.
Provides a comprehensive overview of algorithms, with a focus on C++ implementations. It good choice for students who are interested in learning how to apply algorithms to real-world problems in C++.
Provides a comprehensive overview of algorithmics, with a focus on mathematical foundations. It good choice for students who are interested in learning the theoretical foundations of algorithms.
Offers a Java-centric approach to data structures and algorithms, providing a practical perspective on implementing and analyzing algorithms in a different programming language than Python, complementing the focus of this course.
Offers a Java-centric approach to data structures and problem-solving, providing another perspective on implementing and analyzing algorithms, complementing the focus of this course.
This practical guide provides a collection of algorithms and techniques for solving a wide range of computational problems, offering a valuable reference for extending the concepts covered in this course.
Delves into the cognitive aspects of algorithmic thinking, providing insights into the mental processes involved in solving computational problems, complementing the focus on practical algorithms in this course.
Provides a concise and accessible introduction to algorithms and data structures. It good choice for students who are interested in learning the basics of algorithms and data structures.
Provides a solid foundation in discrete mathematics, including topics such as graph theory, set theory, and logic, which serve as prerequisites for understanding the theoretical concepts in this course.
This classic series of books provides a comprehensive and authoritative treatment of computer programming. It valuable reference for students and practitioners alike.
This advanced book delves into combinatorial optimization problems, providing a deeper understanding of the theoretical foundations and applications of graph algorithms, complementing the practical focus of this course.
Provides a comprehensive overview of discrete mathematics, with a focus on applications to computer science. It valuable reference for students and practitioners alike.
This classic book offers a rigorous and comprehensive treatment of mathematical concepts and techniques used in computer science, providing a strong theoretical foundation for this course.
Provides a comprehensive overview of modern computer arithmetic. It valuable reference for students and practitioners alike.
Provides a comprehensive overview of applied cryptography. It valuable reference for students and practitioners alike.

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