Fall 2023 Course Review: EECS 281, Data Structures and Algorithms¶
Rating: 3.5 / 5
Instructor (Marcus Darden)¶
Pros:
- Pretty good at explaining things
- Has a "lecture" playlist that he plays before lecture
- You have to see how long his hair is
Cons:
- Sometimes slow
Things I learned¶
- How to use C++ STL efficiently
- Big O notation
- Common data structures and how they manage memory
- Vectors & deques
- Binary heaps
- Hash tables
- Graphs
- Algorithms
- Sorts
- Backtracking & branch-and-bound
- Dynamic programming
VG151 (intro to computer programming) made me hate C++, because what the
fuck is polymorphism anyway. EECS 280 made me not hate it, and 281 made me
kind of like it (for the job it is designed for). In the four projects
I hardly ever inherited a class, or managed memory with new and
delete.
My favorite topics are hash tables and dynamic programming. Imagine this: you've been forced to do your work on those pathetic flip-out-of-the-armrest desks, and suddenly someone gives you a huge table. This is what it feels to be given O(n²) space when all you've got so far is O(n), or worse, O(1).
Fun fact: Before I took this course, I did not believe hash tables worked like this. Like, seriously, why are you leaving more than half the buckets empty??
Projects¶
- p1: puzzle solver with DFS (stack) and BFS (queue)
- p2: priority queue
- p2a: shooting zombies (with
std::priority_queue) - p2b: implementing your own priority queue
- p2a: shooting zombies (with
- p3: bank simulator (
std::unordered_map) - p4: graphs
- part a: maximum spanning tree with Prim's algorithm
- part b: fast TSP (traveling salesman problem) at O(n²)
- part c: optimal TSP at O(n!)
Note: p4b does not require a certain algorithm and is the only open-ended "optimization", graded on how close your result is to the instructors'. The instructors don't have an optimal answer either, because that would be O(n!) and take forever.
My favorite project is p3, and it is the only project that I got 100/100. Reason: it's the only project that is something you'd use in real life applications. Managing a database sort of stuff.
Project 4 is easier for me than p1 and p2 actually. There's a lot of nitty-bitty in the latter two. Like output formats and ambiguous specification. My solution leaves room for improvement, but the 3% or 4% deduction barely justifies the extra work, so I didn't even bother. If the projects were better I'd give the course a 4 / 5.
Favorite moment¶
- When I wrote a Tampermonkey script that plays Bad Apple!! on the autograder, shared a video on Piazza, and got 28 "good note"s
