Skip to content

thanasistratigakis/Data-Structures

 
 

Repository files navigation

Advanced Data Structures & Algorithms with Python

Course Schedule

Course Dates: Monday, January 23 – Friday, March 3, 2017 (6 weeks)

Class Times: Monday, Wednesday, Friday 1–3pm (17 class sessions)

Class 1: Monday, January 23 – Exponents & Number Bases

Topics:

Challenges:

  • practice number base conversions on worksheet
  • implement base conversion functions for positive numbers using starter code and unit tests
  • stretch: implement base conversion for negative numbers
  • stretch: implement base conversion for fractional numbers

Class 2: Wednesday, January 25 – Recursion & Search Algorithms

Topics:

Challenges:

Class 3: Friday, January 27 – String Algorithms

Topics:

Challenges:

  • implement string searching function (try multiple approaches)
  • implement iterative and recursive palindrome checking functions using starter code and unit tests
  • annotate functions with complexity analysis
  • stretch: implement iterative and recursive anagram generating functions

Project:

  • phone call routing: implement phone number prefix matching
  • annotate functions with complexity analysis

Class 4: Monday, January 30 – List, Stack & Queue

Topics:

Resources:

Challenges:

  • implement constant-time length function on linked list using starter code and unit tests
  • implement stack with dynamic array and linked list using starter code and unit tests
  • implement queue with dynamic array and linked list using starter code and unit tests
  • annotate functions with complexity analysis
  • stretch: implement deque with doubly linked list

Class 5: Wednesday, February 1 – Set, Map & Hash Table

Topics:

Resources:

Challenges:

  • implement set with hash table
  • implement automatic resizing of hash table
  • annotate functions with complexity analysis
  • stretch: implement set operations union, intersection, difference, subset
  • stretch: implement circular buffer with dynamic array and linked list

Class 6: Friday, February 3 – Trees

Topics:

Resources:

Challenges:

  • implement binary search tree with node objects
  • implement search, insert, delete binary search tree operations
  • annotate functions with complexity analysis
  • stretch: implement binary search tree with singly linked list

Project:

Class 7: Monday, February 6 – Tree Traversals & Self-Balancing Trees

Topics:

Resources:

Challenges:

  • implement iterative and recursive binary search tree traversals
  • implement map (dictionary) with binary search tree
  • annotate functions with complexity analysis
  • stretch: implement AVL tree or splay tree with insert and search operations

Class 8: Wednesday, February 8 – More Self-Balancing Trees

Topics:

Challenges:

  • implement 2-3 tree with insert and search operations
  • annotate functions with complexity analysis
  • stretch: implement n-ary search tree using dynamic array of siblings
  • stretch: implement B-tree or k-d tree with insert and search operations

Class 9: Friday, February 10 – Iterative Sorting Algorithms

Topics:

Resources:

Challenges:

  • implement bubble, selection, and insertion sorts
  • implement counting and bucket sorts
  • annotate functions with complexity analysis
  • stretch: implement insertion sort using binary search
  • stretch: implement cocktail shaker or Shell sort

Project:

Class 10: Monday, February 13 – Divide-and-Conquer Recursion

Topics:

Challenges:

Project:

Class 11: Wednesday, February 15 – Recursive Sorting Algorithms

Topics:

Resources:

Challenges:

  • implement stable quick sort with a separate partition algorithm
  • annotate functions with complexity analysis

Class 12: Friday, February 17 – Priority Queue & Heap

Topics:

Resources:

Challenges:

  • implement binary min heap with dynamic array using starter code and unit tests
  • implement heap sort with binary heap
  • implement priority queue with binary heap
  • implement priority queue with binary search tree
  • annotate functions with complexity analysis
  • stretch: implement stack with priority queue
  • stretch: generalize binary heap with min or max initialization option

Class 13: Wednesday, February 22 – Graphs

Topics:

Resources:

Project:

  • collect data set of social network, airplane routes, or your choice
  • implement graph with appropriate representation for that data set

Class 14: Friday, February 24 – Graph Traversals & Spanning Trees

Topics:

Resources:

Graph Project:

  • implement graph traversals: depth-first search, breadth-first search
  • implement an algorithm to find connected components on your graph data set
  • implement an algorithm to find a minimum spanning tree on your graph data set
  • annotate functions with complexity analysis

Trie Project:

  • implement trie with insert and prefix search operations
  • revisit phone call routing scenarios 3, 4, and 5 with trie
  • annotate functions with complexity analysis

Class 15: Monday, February 27 – Graph Algorithms

Topics:

Resources:

Graph Project:

  • implement an algorithm to find a shortest path or maximum flow on your graph data set
  • annotate functions with complexity analysis

Class 16: Wednesday, March 1 – Optimization & Memoization

Topics:

Challenges:

Resources:

Class 17: Friday, March 3 – Dynamic Programming

Topics:

Challenges:

Resources:

Working with this GitHub repository

This repository (located at https://github.com/MakeSchool-18/Data-Structures) is the course's origin repository which will contain course materials including links, slides, and challenges. Note that you cannot commit or push to the origin repository. However, you can fork it to maintain your own version of it and push your code there. Here's an overview of what your repository setup should look like:

Repository Overview

Follow these steps to set up your own course repository:

  1. Clone this repository on your computer: git clone git@github.com:MakeSchool-18/Data-Structures.git

  2. Fork this repository on GitHub to create your own version of this repo on your GitHub account, which should also be named Data-Structures

  3. Add your GitHub repository as a remote to the local one on your computer (note: you need to give a name to the remote, e.g. your first name): git remote add <first-name> git@github.com:<github-user>/Data-Structures.git

  4. Link the local repo to your remote GitHub repo: git push -u <first-name> master

  5. When you want to access new course materials, just pull from the origin remote repo: git pull origin master

  6. When you've completed a challenge and want to share it for code review, commit your work and push it to your own remote repo with: git push

About

Product College course on Advanced Data Structures & Algorithms with Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%