Course Overview
Welcome to Data Structures and Algorithms 2!
Course Description
This course builds on Data Structures & Algorithms 1. Students will explore non-linear data structures, and implement and analyze advanced algorithms.
The course begins with a brief review of basic data structures and algorithms. Students learn about advanced data structures including heaps, priority queues, and hash tables. Students build on their knowledge of graph theory to implement graph algorithms, and explore topics like finding the shortest paths in graphs, and applications of algorithms in maps, social networks, and a host of real-life applications. Other key topics include: divide and conquer, recursion, greedy algorithms, dynamic programming, computability theory, and case studies in algorithm design.
The course emphasizes big-picture understanding and practical problem-solving in preparation for technical interviews and professional practice. Students will solve common algorithmic problems, and optionally participate in mock interview sessions.
Topics
- Hash tables
- Heaps and priority queues
- State-space search
- Greedy algorithms
- Graphs
- Computability
- Divide-and-conquer algorithms
- Dynamic programming
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 projects 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
- Implement and evaluate runtime of a variety of algorithms, including divide-and-conquer, greedy, and dynamic programming algorithms
- Solve common algorithmic technical interview problems
Instructor
- Cody Doucette
- cody.doucette@kibo.school
Please contact on Discord first with questions about the course.
Live Class Time
- Thursdays, 6:00 PM GMT
Office Hours
- Fridays, 7:00 PM GMT
Core Reading List
- Bible, P. Moser, L. Scarlato, M. (2023). An Open Guide to Data Structures and Algorithms. PALNI.
- Miller, B., Ranum, D. (2013). Problem Solving with Algorithms and Data Structures using Python. Franklin Beedle Publishers. Chapters 6-9 (180pp)
- Goodrich, M. (2013). Data Structures & Algorithms in Python. Chapters 8-15 (418pp)
Supplemental Reading List
- Skiena, S. (2011). The Algorithm Design Manual. Springer; 2nd edition
- Skiena, S. (2020) Analysis of Algorithms, videos and Lecture Notes
- Roughgarden, T. (2017). Algorithms Illuminated Series. Soundlikeyourself Publishing
- Roughgarden, T. (2017). Algorithms 1 (YouTube)
- Leetcode. Practice Problems