CS/ECE 374 covers fundamental tools and techniques from theoretical computer science, including design and analysis of algorithms, formal languages and automata, computability, and complexity. Specific topics include regular and contextfree languages, finitestate automata, recursive algorithms (including divide and conquer, backtracking, dynamic programming, and greedy algorithms), fundamental graph algorithms (including depth and breadthfirst search, topological sorting, minimum spanning trees, and shortest paths), undecidability, and NPcompleteness. The course also has a strong focus on clear technical communication.
 Prerequisites

We assume that students have mastered the material taught in CS 173 (discrete mathematics, especially induction) and CS 225 (basic algorithms and data structures). Note that “mastery” is not the same as “exposure” or even “a good grade”; hence, Homework Zero! If you got a C+ or worse in CS 173, we strongly recommend retaking 173 before taking 374.
 Requirements

This course is required for all undergraduates majoring in Computer Science majors (in both Engineering and LAS) and Computer Engineering.
 Postrequisites

CS/ECE 374 is a prerequisite for at least the following classes:
 Coursework

Grades will be based on weekly written homeworks (30% total), two midterms (20% each), and a final exam (30%). See the grading policies for more details.
 Difficulty

Many students consider 374 to be the single most challenging course in the entire undergraduate CS/CE curriculum (perhaps after ECE 391). On the other hand, we believe (and employers and alumni seem to agree) that 374 is also the most useful course in the undergraduate CS/CE curriculum (perhaps after CS 225), in no small part because it is so challenging. CS and CE majors are among the brightest students on campus; an easier course would be an insulting waste of your time.
Class Resources
 Web site
 Almost everything—course policies, detailed schedule, lecture notes, lecture videos, homeworks, homework solutions, headbanging problems, etc.—can be found here. Hey, look! You found it!
 Lecture notes

There is no required textbook. Lecture notes will be posted to the course web site as the semester progresses. Some older lecture notes and/or slides are already available:
 Videos

All lectures will be recorded, and links to lecture videos will be added to the schedule web page as the semester progresses. However, we strongly encourage students to attend the lectures in person to get the most out of them. Videos from several past semesters are available:
 Moodle
 We will use Moodle for biweekly sanitycheck quizzes, and possibly to report exam grades. If you are not already registered, you can add yourself with the access code 374.
 Gradescope
 We will use Gradescope for homework submission and grading. Anyone can sign up for access to the CS/ECE 374 Piazza site with their favorite alias and email address, using the selfenrollment code 9V6WG9. We will separately ask you for your alias, so that we can map your homework grades to you.
 Piazza
 We will use Piazza for online discussions. Anyone can sign up for access to the CS/ECE 374 Piazza site with their favorite email address and the access code 374. We strongly encourage posting questions on any courserelated topic to Piazza rather than emailing the course staff. You can even post your questions anonymously. (However, we can only give you extra credit for helpful posts if you post them using your real name.)
 Etc.
 I've collected a long list of other useful resources on a separate page.