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 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”.

Course 5 of 7 in the Fundamentals of Computing Specialization..

### Syllabus

**WEEK 1**

Module 1 – Core Materials

What is Algorithmic Thinking?, class structure, graphs, brute-force algorithms

Graded: Homework #1

**WEEK 2**

Modules 1 – Project and Application

Graph representations, plotting, analysis of citation graphs

Graded: Assignment: Degree Distribution for Graphs

Graded: Analysis of Citation Graphs

´b>WEEK 3v

Module 2 – Core Materials

Asymptotic analysis, “big O” notation, pseudocode, breadth-first search

Graded: Homework #2

**WEEK 4**

Module 2 – Project and Application

Connected components, graph resilience, and analysis of computer networks

Graded: Assignment: Connected Components and Graph Resilience

Graded: Analysis of a Computer Network

ENROLL IN COURSE