Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 52 additions & 16 deletions docs/computer-science/theory/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,61 @@ sidebar_position: 7
# Theory
*Timeline: 64 - 128 hours*

Covers everything typically found on the theoretical side of a Data Structures & Algorithms course. Introduction to DSA was covered throughout [Program Design](../program-design/).
A full undergraduate-level introduction to the theory of algorithm design, algorithmic analysis, and data structures.

The primary topics in this part of the specialization are: asymptotic ("Big-oh") notation, sorting and searching, divide and conquer (master method, integer and matrix multiplication, closest pair), and randomized algorithms (QuickSort, contraction algorithm for min cuts).
Primary topics: divide and conquer sorting and searching randomized algorithms graph search shortest paths data structures greedy algorithms minimum spanning trees dynamic programming NP-completeness and more
- [Course website](https://www.algorithmsilluminated.org/)
- **Playlists:**
- [Part 1](https://www.youtube.com/playlist?list=PLXFMmlk03Dt7Q0xr1PIAriY5623cKiH7V)
- [Part 2](https://www.youtube.com/playlist?list=PLXFMmlk03Dt5EMI2s2WQBsLsZl7A5HEK6)
- [Programming problems and test cases](https://github.com/beaunus/stanford-algs/)
- [Discussion forums](https://algorithms.freeforums.net/)

- [Algorithms 1](https://www.coursera.org/learn/algorithms-divide-conquer), 16-32 hrs
## How to run the test cases
- [General information](https://github.com/beaunus/stanford-algs/wiki/Using-Test-Cases)
- [Java](https://github.com/beaunus/stanford-algs/blob/master/tester/java/README.md)
- [PHP](https://github.com/beaunus/stanford-algs/blob/master/tester/php/README.MD)
- [Python](https://github.com/beaunus/stanford-algs/blob/master/tester/python3/README.md)
- [Shell (any programming language)](https://github.com/beaunus/stanford-algs/blob/master/tester/shell/README.md)

The primary topics in this part of the specialization are: data structures (heaps, balanced search trees, hash tables, bloom filters), graph primitives (applications of breadth-first and depth-first search, connectivity, shortest paths), and their applications (ranging from deduplication to social network analysis).
## Roadmap
### Part 1
- Watch 1.1-1.8
- Do [Programming Assignment #1.1: Karatsuba Multiplication](https://github.com/beaunus/stanford-algs/tree/46a5ee9429a22d3545a51ce4b346e09e285ac5e0/testCases/course1/assignment1Multiplication)
- Watch 2.1-4.6
- Do [Programming Assignment #1.2: Count Inversions](https://github.com/beaunus/stanford-algs/tree/master/testCases/course1/assignment2Inversions)
- Watch 5.1-6.3
- Do [Programming Assignment #1.3: Quicksort](https://github.com/beaunus/stanford-algs/tree/master/testCases/course1/assignment3Quicksort)
- Watch 8.1-9.5
- Do [Programming Assignment #1.4: Minimum Cut](https://github.com/beaunus/stanford-algs/tree/master/testCases/course1/assignment4MinCut)
- [Optional Theory Batch](https://github.com/beaunus/stanford-algs/tree/master/testCases/course1/optionalTheoryProblemsBatch1)
- Watch 10.1-10.9
- Do [Programming Assignment #2.1: Strongly Connected Components](https://github.com/beaunus/stanford-algs/tree/master/testCases/course2/assignment1SCC)
- Watch 11.1-12.3
- Do [Programming Assignment #2.2: Dijkstra's Shortest Path](https://github.com/beaunus/stanford-algs/tree/master/testCases/course2/assignment2Dijkstra)
- Watch 13.1-13.6
- Do [Programming Assignment #2.3: Median Maintenance](https://github.com/beaunus/stanford-algs/tree/master/testCases/course2/assignment3Median)
- Watch 14.1-16.2
- Do [Programming Assignment #2.4: Two-Sum](https://github.com/beaunus/stanford-algs/tree/master/testCases/course2/assignment4TwoSum)

- [Algorithms 2](https://www.coursera.org/learn/algorithms-graphs-data-structures), 16-32 hrs

The primary topics in this part of the specialization are: greedy algorithms (scheduling, minimum spanning trees, clustering, Huffman codes) and dynamic programming (knapsack, sequence alignment, optimal search trees).

- [Algorithms 3](https://www.coursera.org/learn/algorithms-greedy), 16-32 hrs

The primary topics in this part of the specialization are: shortest paths (Bellman-Ford, Floyd-Warshall, Johnson), NP-completeness and what it means for the algorithm designer, and strategies for coping with computationally intractable problems (analysis of heuristics, local search).

- [Algorithms 4](https://www.coursera.org/learn/algorithms-npcomplete), 16-32 hrs
### Part 2
- Watch 1-21
- Do [Programming Assignment #3.1: Scheduling And Minimums Spanning Trees](https://github.com/beaunus/stanford-algs/tree/master/testCases/course3/assignment1SchedulingAndMST)
- Watch 22-32
- Do [Programming Assignment #3.2: Clustering](https://github.com/beaunus/stanford-algs/tree/master/testCases/course3/assignment2Clustering)
- Watch 33-43
- Do [Programming Assignment #3.3: Huffman And Maximum Weight Independent Sets](https://github.com/beaunus/stanford-algs/tree/master/testCases/course3/assignment3HuffmanAndMWIS)
- Watch 44-48
- Do [Programming Assignment #3.4: Knapsack](https://github.com/beaunus/stanford-algs/tree/master/testCases/course3/assignment4Knapsack)
- Watch 49-67
- Do [Programming Assignment #4.1: All Pairs Shortest Path](https://github.com/beaunus/stanford-algs/tree/master/testCases/course4/assignment1AllPairsShortestPath)
- Watch 68-78
- Do [Programming Assignment #4.2: Traveling Salesman](https://github.com/beaunus/stanford-algs/tree/master/testCases/course4/assignment2TSP)
- Watch 79-84
- Do [Programming Assignment #4.3: Traveling Salesman Heuristic](https://github.com/beaunus/stanford-algs/tree/master/testCases/course4/assignment3TSPHeuristic)
- Watch 85-95
- Do [Programming Assignment #4.4: 2SAT](https://github.com/beaunus/stanford-algs/tree/master/testCases/course4/assignment4TwoSat)

## Extra Resources
- [Algorithms Illuminated](https://www.algorithmsilluminated.org/): The textbook authored by the instructor of this set of courses. The textbook covers roughly the same material and can be used as either an alternative or as a supplement to the courses.
- [Discussion forums](https://algorithms.freeforums.net/): Tim Roughgarden actually reads these from time to time.
- [Test cases and test runners](https://github.com/beaunus/stanford-algs): Contains test cases for all assignments in the courses. You can use this to validate the correctness of your implementations. Keep in mind that the input files in the repository may have a slightly different format than the ones you download from Coursera (such as spaces instead of tabs).
- [Coursera Alogorithms Specialization](https://www.coursera.org/specializations/algorithms)
For students that want access to extra theory problems as well as paid certificate.