This course is a part of the "Fundamentals of Computing" specialization. This 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.
About the course
The course emphasizes implementing the algorithms and solving the original problems that gave rise to the need for these algorithms in the first place, much of the course will be devoted to the third step, namely, algorithm design.
Here, the course will introduce students to different algorithm design strategies, as well as mathematical tools for reasoning about the correctness and efficiency of algorithms.
Prior mathematical and programming experience at the level of "Principles of Computing" (PoC).
Students who have not taken PoC can also take up the course, but 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 PoC.
Week 1: What is algorithmic thinking?
Week 2: Graphs - Definitions, examples, brute force algorithms
Week 3: Algorithmic efficiency - Asymptotic notation, graph search
Week 4: Graph partitioning - Conflict and fission in groups (social anthropology)
Week 5: Problem reduction - Modified graph search with improved efficiency
Week 6: Divide and conquer - Recurrences, the Master Theorem
Week 7: Weighted graphs - Minimum spanning trees
Week 8: Greedy algorithms - Prim's algorithm
This course will last eight weeks. The lectures from each week will focus on the topics listed in the syllabus while an associated weekly "mini-project" will serve to reinforce these concepts in practice. The class will also include homeworks to provide further feedback.
August 25, 2014 - October 20, 2014
For further information, click here.