Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/UBC-MDS/DSCI_512_alg-data-struct


https://github.com/UBC-MDS/DSCI_512_alg-data-struct

course module

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

        

# DSCI 512: Algorithms and Data Structures

How to choose and use appropriate algorithms and data structures to help solve data science problems. Key concepts such as algorithmic complexity and recursion.

## Schedule

Note: lecture recording videos from the 2019 course offering are available [here](https://www.youtube.com/playlist?list=PLWmXHcz_53Q02OsWy9IduQiSGUSnVGFhm).

| # | Topic | Optional reading/watching |
|---|-------|---------------------------|
| 1 | [Time complexity, big O, space complexity](lectures/01_complexity-big-O.ipynb) | [Introduction to Big O notation](https://www.youtube.com/watch?v=D6xkbGLQesk) |
| 2 | [Searching, sorting, hash tables](lectures/02_searching-sorting-hash.ipynb) | [Binary search video](https://youtu.be/y62zj9ozPOM?t=1314) - watch until 31:00. |
| 3 | [Recursive algorithms](lectures/03_recursive-algorithms.ipynb) | |
| 4 | [Recursive data structures](lectures/04_recursive-data-structures.ipynb) | |
| 5 | [Graphs, graph searches](lectures/05_graphs.ipynb) | [Graph traversals video](https://www.youtube.com/watch?v=bIA8HEEUxZI); brilliant.org on [Graph Theory](https://brilliant.org/wiki/graph-theory/), [Traversals](https://brilliant.org/wiki/traversals/), and [BSTs](https://brilliant.org/wiki/binary-search-trees/) |
| 6 | [Adjacency matrices, sparse matrices, generators, map/reduce](lectures/06_sparse-matrices.ipynb) | [StackOverflow post on generators](https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do/231855#231855) |
| 7 | [Discrete optimization](lectures/07_discrete-optimization.ipynb) | [Linear programming and discrete optimization with Python using PuLP](https://towardsdatascience.com/linear-programming-and-discrete-optimization-with-python-using-pulp-449f3c5f6e99) |
| 8 | [Dynamic programming, Speeding up Python code](lectures/08_dynamic-programming-vectorization.ipynb) | [Dynamic programming](http://web.mit.edu/15.053/www/AMP-Chapter-11.pdf) |

## Lab Assignments

| | Lab topic |
|-----|-------------|
| 1 | [Computational complexity](labs/lab1/lab1.ipynb) |
| 2 | [Recursive algorithms & data structures](labs/lab2/lab2.ipynb) |
| 3 | [Graphs](labs/lab3/lab3.ipynb) |
| 4 | [Discrete optimization](labs/lab4/lab4.ipynb) |

## Course Learning Objectives

By the end of the course, students are expected to be able to:

1. Analyze the scalability and trade-offs of various basic algorithms and data structures using Big-O notation.
2. Read and interpret recursive functions.
3. Select appropriate data structures, such as graphs, given a data set.
4. Map certain real-world problems to discrete optimization problems.
5. Diagnose rate-limiting aspects of slow Python code and enumerate various options for speeding it up.

## Online reference material
* [Problem Solving with Algorithms and Data Structures using Python](https://runestone.academy/runestone/books/published/pythonds/index.html)
* [Visualizing Algorithms](https://bost.ocks.org/mike/algorithms/)
* [500 Data Structures and Algorithms practice problems and their solutions](https://techiedelight.quora.com/500-Data-Structures-and-Algorithms-practice-problems-and-their-solutions)
* [Recursion practice problems](https://www.w3resource.com/python-exercises/data-structures-and-algorithms/python-recursion.php)
* [P vs. NP and the Computational Complexity Zoo](https://www.youtube.com/watch?v=YX40hbAHx3s) (video)

## Books
* Goodrich, Tamassia, Goldwasser. [Data Structures and Algorithms in Python](https://www.amazon.ca/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/).
* Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani, *Algorithms*, also available [here](http://highered.mheducation.com/sites/0073523402/index.html).
* John Kleinberg and Eva Tardos, [Algorithm Design](https://www.amazon.ca/Algorithm-Design-Jon-Kleinberg/dp/0321295358)
* Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein ("CLRS"),
[Introduction to Algorithms](https://www.amazon.ca/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844).