Course Overview

Welcome to Data Structures and Algorithms!

Course Description

This course teaches the fundamentals of data structures and introduces students to the implementation and analysis of algorithms.

Students start by examining the basic linear data structures: linked lists, arrays, stacks, and queues. They learn how to build these structures from scratch, represent algorithms using pseudo-code, and translate algorithms into running programs. They apply these algorithms to real-life applications to understand complexity and performance tradeoffs. Students will also learn how to develop algorithms for sorting and searching, use iteration and recursion for repetition, and make tradeoffs between the approaches. They will learn to estimate the efficiency of algorithms, and practice writing and refining algorithms in Python.

This course emphasizes big-picture understanding and practical problem-solving in preparation for technical interviews and professional practice. Throughout the course, students will solve common practice problems, and participate in peer interview sessions. As part of their formative assessments, they will also deepen their understanding of these topics and practice technical communication by writing technical blog posts.

Topics

  • Python Memory Model
  • ADTs
  • Algorithm Analysis
  • Searching and Sorting
  • Recursion
  • Linked Lists
  • Lists, Stacks, and Queues
  • Trees

How the course works

There are multiple ways you'll learn in this course:

  • Read and engage with the materials on this site
  • Attend live class and complete the activities in class
  • Answer practice exercises to try out the concepts
  • Complete assignments and exams to demonstrate what you have learned

Active engagement is necessary for success in the course! You should try to write lots of programs, so that you can explore the concepts in a variety of ways.

You are encouraged to seek out additional practice problems outside of the practice problems included in the course.

Learning Outcomes

By the end of the course, students will be able to:

  • Describe the implementation and performance of fundamental data structures
  • Describe underlying data structures upon which more complex structures are built
  • Design and analyze recursive algorithms
  • Implement several searching and sorting algorithms including insertion-sort, merge-sort and heap-sort
  • Solve common algorithmic technical interview problems

Instructor

Please contact on Discord first with questions about the course.

Live Class Time

  • Thursdays, 6:00 PM GMT

Office Hours

  • Fridays, 3:00 PM GMT

Core Reading List

  • Miller, B. Ranum, D. (2013). Problem Solving with Algorithms and Data Structures using Python. Franklin Beedle Publishers. Chapters 1-5 (183pp)
  • Skiena, S. (2020). The Algorithm Design Manual. Springer; 3rd edition.

Supplemental Reading List

  • Goodrich, M. (2013). Data Structures & Algorithms in Python. Chapters 1 - 7 (294 pp).
  • Leetcode. Practice Problems.