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 class is designed to train students in the mathematical concepts and process of "Algorithmic Thinking", allowing them to build simpler, more efficient solutions to 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 class is designed to train students in the mathematical concepts and process of "Algorithmic Thinking", allowing them to build simpler, more efficient solutions to computational problems.

In part 2 of this course, we will study advanced algorithmic techniques such as divide-and-conquer and dynamic programming. As the central part of the course, students will implement several algorithms in Python that incorporate these techniques 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.

Once students have completed this class, they will have both the mathematical and programming skills to analyze, design, and program solutions to a wide range of computational problems. While this class will use Python as its vehicle of choice to practice Algorithmic Thinking, the concepts that you will learn in this class transcend any particular programming language.

Enroll now

What's inside

Syllabus

Module 3 - Core Materials
Sorting, searching, big-O notation, the Master Theorem
Module 3 - Project and Application
Closest pairs of points, clustering of points, comparison of clustering algorithms
Read more
Module 4 - Core Materials
Dynamic programming, running time of DP algorithms, local and global sequence alignment
Module 4 - Project and Application
Computation of sequence alignments, applications to genomics and text comparison

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Teaches more advanced algorithmic concepts, including divide-and-conquer and dynamic programming, for solving larger-scale problems
Involves hands-on implementation in Python to reinforce algorithmic thinking and problem-solving skills
Emphasizes the interaction between algorithms and real-world data structures through practical examples
Builds on the foundation of basic algorithmic concepts covered in Part 1 of the course, enabling learners to progress and refine their understanding
Suitable for students with a solid grasp of Python programming and basic algorithmic concepts
Requires proficiency in Python programming, which may pose a barrier for learners without prior coding experience

Save this course

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

Reviews summary

Algorithmic thinking part 2

Learners say Algorithmic Thinking Part 2 is a theoretically challenging, conceptually focused course that is well structured and engaging. Code writing is a key component of the course, helping learners comprehend concepts more deeply. Peer review is a significant part of assessment. Mathematical proofs are also a key feature, making this a suitable course for learners seeking high-level understanding of algorithms.
Lots of code writing
"At times, I felt the need for slightly more instruction."
"Then again it's good to be thrown in at the deep end and, writing code eventually helps comprehension."
Mathematical proofs used in course
"It is mathematical in nature."
"If you want a more practice-approached model, please search elsewhere."
Course is challenging
"The course is theoretically more difficult than most other Algorithms course you'd find here on Coursera."
"really having a hard time understanding this professor"
Peer review is required
"This is really good course but bad thing about the course is masrks is given by the students or other person and some people give it bad marks even that's it correct"
"They asked 5 peer revview to pass the course for each project"

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 2) with these activities:
Brush Up on Python Programming
Refreshing your Python programming skills will help you feel more confident in implementing the algorithms you learn in the course.
Browse courses on Python
Show steps
  • Review your notes or online resources on Python syntax and data structures.
  • Solve a few simple coding challenges or practice exercises in Python.
Organize Your Course Notes and Materials
Keeping your notes and materials organized will help you stay on top of the course material and improve your retention.
Show steps
  • Gather all your notes, handouts, quizzes, and assignments.
  • Create a filing system or use a note-taking app to organize the materials.
Review Sorting and Searching Algorithms
Reviewing sorting and searching algorithms will prepare you for the core concepts covered in the course.
Browse courses on Sorting Algorithms
Show steps
  • Go over your notes from a previous algorithms course or study materials.
  • Work through practice problems on sorting and searching algorithms.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Follow Tutorials on Divide-and-Conquer and Dynamic Programming
Following tutorials on these advanced algorithmic techniques will provide a solid foundation for the second part of the course.
Show steps
  • Find reputable online tutorials or video lectures on divide-and-conquer and dynamic programming.
  • Go through the tutorials, taking notes and working through any examples.
Solve Coding Challenges on Dynamic Programming
Solving coding challenges will allow you to apply the dynamic programming techniques you learn in the course and improve your problem-solving skills.
Browse courses on Dynamic programming
Show steps
  • Find online coding platforms or resources that offer dynamic programming challenges.
  • Select challenges of varying difficulty levels and work through them, implementing dynamic programming solutions.
  • Review your solutions and identify areas for improvement.
Implement a Dynamic Programming Algorithm in Python
Implementing a dynamic programming algorithm in Python will reinforce your understanding of the technique and provide practical experience.
Browse courses on Dynamic programming
Show steps
  • Choose a problem that can be solved using dynamic programming.
  • Design and implement the algorithm in Python, ensuring efficiency and correctness.
  • Test your implementation thoroughly with various inputs.
Analyze a Real-World Dataset Using Dynamic Programming
Analyzing a real-world dataset using dynamic programming will provide you with valuable hands-on experience and demonstrate the practical applications of the technique.
Browse courses on Dynamic programming
Show steps
  • Identify a suitable dataset and problem that can be solved using dynamic programming.
  • Load and preprocess the dataset into a suitable format for analysis.
  • Implement and apply the dynamic programming algorithm to analyze the dataset.
  • Interpret the results and draw meaningful conclusions.
Connect with Experienced Programmers
Connecting with experienced programmers can provide you with valuable insights and guidance as you progress through the course.
Browse courses on Networking
Show steps
  • Attend online or offline meetups and conferences.
  • Reach out to professionals in your field through LinkedIn or other social media platforms.

Career center

Learners who complete Algorithmic Thinking (Part 2) will develop knowledge and skills that may be useful to these careers:
Software Engineer
Software Engineers design, develop, and test software applications. They may work on a variety of projects, from small personal apps to large enterprise systems. Algorithmic Thinking (Part 2) can be a valuable course for Software Engineers because it teaches advanced algorithmic techniques that can help them develop more efficient and effective software solutions. The course also covers topics such as sorting, searching, and big-O notation, which are essential for understanding the performance of software algorithms.
Data Scientist
Data Scientists use their knowledge of mathematics, statistics, and computer science to extract insights from data. They may work on a variety of projects, such as developing predictive models, analyzing customer data, or identifying fraud. Algorithmic Thinking (Part 2) can be a helpful course for Data Scientists because it teaches advanced algorithmic techniques that can help them develop more efficient and effective data analysis solutions. The course also covers topics such as dynamic programming and sequence alignment, which are important for understanding the performance of data analysis algorithms.
Machine Learning Engineer
Machine Learning Engineers design, build, and deploy machine learning models. They may work on a variety of projects, such as developing self-driving cars, improving healthcare outcomes, or detecting fraud. Algorithmic Thinking (Part 2) can be a helpful course for Machine Learning Engineers because it teaches advanced algorithmic techniques that can help them develop more efficient and effective machine learning algorithms. The course also covers topics such as dynamic programming and sequence alignment, which are important for understanding the performance of machine learning algorithms.
Computer Scientist
Computer Scientists research and develop new computing technologies. They may work on a variety of projects, such as developing new programming languages, designing new computer architectures, or creating new algorithms. Algorithmic Thinking (Part 2) can be a helpful course for Computer Scientists because it teaches advanced algorithmic techniques that can help them develop more efficient and effective computing solutions. The course also covers topics such as dynamic programming and sequence alignment, which are important for understanding the performance of computing algorithms.
Operations Research Analyst
Operations Research Analysts use mathematical and analytical techniques to solve complex problems in a variety of industries. They may work on projects such as improving supply chain efficiency, reducing costs, or optimizing production schedules. Algorithmic Thinking (Part 2) can be a helpful course for Operations Research Analysts because it teaches advanced algorithmic techniques that can help them develop more efficient and effective solutions to complex problems. The course also covers topics such as dynamic programming and sequence alignment, which are important for understanding the performance of operations research algorithms.
Quantitative Analyst
Quantitative Analysts use mathematical and statistical techniques to analyze financial data and make investment decisions. They may work on a variety of projects, such as developing trading strategies, managing risk, or evaluating investments. Algorithmic Thinking (Part 2) can be a helpful course for Quantitative Analysts because it teaches advanced algorithmic techniques that can help them develop more efficient and effective financial analysis solutions. The course also covers topics such as dynamic programming and sequence alignment, which are important for understanding the performance of financial analysis algorithms.
Data Analyst
Data Analysts collect, clean, and analyze data to help businesses make informed decisions. They may work on a variety of projects, such as analyzing customer data, identifying trends, or developing predictive models. Algorithmic Thinking (Part 2) can be a helpful course for Data Analysts because it teaches advanced algorithmic techniques that can help them develop more efficient and effective data analysis solutions. The course also covers topics such as dynamic programming and sequence alignment, which are important for understanding the performance of data analysis algorithms.
Business Analyst
Business Analysts work with businesses to improve their processes and systems. They may work on a variety of projects, such as analyzing business requirements, developing new business strategies, or implementing new technologies. Algorithmic Thinking (Part 2) can be a helpful course for Business Analysts because it teaches advanced algorithmic techniques that can help them develop more efficient and effective business solutions. The course also covers topics such as dynamic programming and sequence alignment, which are important for understanding the performance of business analysis algorithms.
Systems Analyst
Systems Analysts design, develop, and implement computer systems. They may work on a variety of projects, such as developing new software applications, upgrading existing systems, or integrating new technologies. Algorithmic Thinking (Part 2) can be a helpful course for Systems Analysts because it teaches advanced algorithmic techniques that can help them develop more efficient and effective systems solutions. The course also covers topics such as dynamic programming and sequence alignment, which are important for understanding the performance of systems analysis algorithms.
Software Developer
Software Developers design, develop, and test software applications. They may work on a variety of projects, from small personal apps to large enterprise systems. Algorithmic Thinking (Part 2) can be a helpful course for Software Developers because it teaches advanced algorithmic techniques that can help them develop more efficient and effective software solutions. The course also covers topics such as sorting, searching, and big-O notation, which are essential for understanding the performance of software algorithms.
Web Developer
Web Developers design, develop, and maintain websites. They may work on a variety of projects, from small personal websites to large e-commerce sites. Algorithmic Thinking (Part 2) can be a helpful course for Web Developers because it teaches advanced algorithmic techniques that can help them develop more efficient and effective web solutions. The course also covers topics such as sorting, searching, and big-O notation, which are essential for understanding the performance of web algorithms.
Database Administrator
Database Administrators design, implement, and maintain databases. They may work on a variety of projects, from small personal databases to large enterprise databases. Algorithmic Thinking (Part 2) can be a helpful course for Database Administrators because it teaches advanced algorithmic techniques that can help them develop more efficient and effective database solutions. The course also covers topics such as sorting, searching, and big-O notation, which are essential for understanding the performance of database algorithms.
Network Administrator
Network Administrators design, implement, and maintain computer networks. They may work on a variety of projects, from small personal networks to large enterprise networks. Algorithmic Thinking (Part 2) can be a helpful course for Network Administrators because it teaches advanced algorithmic techniques that can help them develop more efficient and effective network solutions. The course also covers topics such as sorting, searching, and big-O notation, which are essential for understanding the performance of network algorithms.
Information Security Analyst
Information Security Analysts design, implement, and maintain information security systems. They may work on a variety of projects, from small personal security systems to large enterprise security systems. Algorithmic Thinking (Part 2) can be a helpful course for Information Security Analysts because it teaches advanced algorithmic techniques that can help them develop more efficient and effective security solutions. The course also covers topics such as sorting, searching, and big-O notation, which are essential for understanding the performance of security algorithms.
Computer Support Specialist
Computer Support Specialists provide technical support to users of computers and other electronic devices. They may work on a variety of projects, from troubleshooting hardware and software problems to installing and configuring new systems. Algorithmic Thinking (Part 2) can be a helpful course for Computer Support Specialists because it teaches advanced algorithmic techniques that can help them develop more efficient and effective solutions to technical problems. The course also covers topics such as sorting, searching, and big-O notation, which are essential for understanding the performance of computer support algorithms.

Reading list

We've selected eight 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 2).
Provides a comprehensive overview of sorting and searching algorithms. It covers a wide range of topics, including sorting, searching, and graph algorithms.
This classic textbook comprehensive guide to the analysis and design of algorithms. It covers a wide range of topics, including sorting, searching, graph algorithms, and dynamic programming.
Provides a comprehensive overview of algorithm design techniques, including divide-and-conquer and dynamic programming. It valuable resource for students who want to learn more about the theoretical foundations of algorithm design.
Provides a clear and concise introduction to dynamic programming. It covers a wide range of topics, including the knapsack problem, the traveling salesman problem, and the sequence alignment problem.
Provides a comprehensive overview of divide-and-conquer algorithms. It covers a wide range of topics, including sorting, searching, graph algorithms, and dynamic programming.
This textbook provides a comprehensive overview of algorithms and data structures for massive datasets. It covers a wide range of topics, including sorting, searching, graph algorithms, and dynamic programming.
This textbook provides a clear and concise introduction to algorithms. It covers a wide range of topics, including sorting, searching, graph algorithms, and dynamic programming.
This textbook provides a comprehensive overview of data structures and algorithms in Python. It covers a wide range of topics, including sorting, searching, graph algorithms, and dynamic programming.

Share

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

Similar courses

Here are nine courses similar to Algorithmic Thinking (Part 2).
Algorithmic Thinking (Part 1)
Most relevant
Principles of Computing (Part 2)
Most relevant
Algorithmic Design and Techniques
Most relevant
Algorithmic Toolbox
Most relevant
Algorithmic Solutions: Design, Problem Solving, Reporting
Most relevant
Principles of Computing (Part 1)
Most relevant
Geometric Algorithms
Most relevant
An Introduction to Interactive Programming in Python...
Most relevant
An Introduction to Interactive Programming in Python...
Most relevant
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