This is the current CS/ECE 374-B site for the Spring 2024 semester. It is a modified version of ECE374-B Kani Archive developed by Prof. Nickvash Kani. Most of the course content including lectures, labs, and assignments is adopted and modified from there. We acknowledge, credit, and thank Prof. Kani for that.CS/ECE 374 covers fundamental tools and techniques from theoretical computer science including automata and formal languages, design and analysis of algorithms, computability, and complexity. Specific topics include regular and context-free languages, finite-state automata, recursive algorithms (including divide and conquer, backtracking, dynamic programming, and greedy algorithms), fundamental graph algorithms (including depth- and breadth-first search, topological sorting, minimum spanning trees, and shortest paths), undecidability, and NP-completeness. The course also has a strong focus on clear technical communication.