"CS 374" — About This Course

CS 498 section 374 (unofficially "CS 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 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.
This is the third offering of "CS 374", and the first one "at scale" (400 students). Some bugs are to be expected. Your patience is appreciated.
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!
CS 374 is a prerequisite for CS 421 (programming languages, required for all CS majors), the soon-to-be revised CS 473, and possibly for other 400-level courses.
Grades will be based on online quizzes (5% total), weekly written homeworks (25% total), two midterms (21% each), and a final exam (28%). See the grading policies for more details.
This is a hard course. Many CS majors considered CS 473 the single most challenging course in the entire undergraduate curriculum; CS 374 covers more material than CS 473 did, at a faster pace. On the other hand, many alumni and employers consider CS 473 the most useful course in the undergraduate computer science curriculum (after CS 225), in no small part because it was so challenging. It is our sincere hope that CS 374 develops a similar reputation. CS and CE majors are some of 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, head-banging problems, etc.—can be found here. Hey, look! You found it!
Lecture notes
There is no required textbook for this class. Lecture notes and presentation slides will be posted to the course web site as the semester progresses. Some older lecture notes are already available:
At present, room 1002 ECEB is not video-capture enabled. As soon as it is, we will begin recording all lectures and posting them on this website. There are no estimates as to when this might occur.
We will use Moodle for weekly online quizzes, for homework turn-in and grading, and to record and distribute grades. Registered students should already have access. If you've recently registered, it may take until the next day to gain access. Contact the course staff if this does not occur in a timely manner.
We will use Piazza for online discussions. Anyone can sign up for access to the CS 374 Piazza site with your favorite email address and the access code UIUCCS374. We strongly encourage posting questions on any course-related topic to Piazza rather than emailing the course staff. You can even post your questions anonymously. Furthermore, all questions to course staff should be posted as a private note via Piazza.
There are a long list of other useful resources on a separate page.

What's happening with CS x73?

For students familiar with the existing CS curriculum: CS 374 includes about half of the material in CS 373 (which has now been retired) and about two-thirds of the material from CS 473 (which is being revised), combined into a single four-credit 300-level course. The move from two required theory courses (373 and 473) to one (374) is part of a larger revision of the undergrad CS currculum. This particular change was motivated by several factors.

Covering every important topic from CS 373 and CS 473 in a single course is simply impossible; we have had to make some difficult choices. Topics from CS 473 that we could not include will survive in a new revision of CS 473, which will launch next semester; other 400-level elective CS theory courses are also in development. Here is our current timeline for the transition:

Spring 2014
CS 373 (last offering)
CS 374 (first pilot, limited enrollment)
CS 473
Fall 2014
CS 374 (second pilot, limited enrollment)
CS 473
CS 573 (last offering)
Spring 2015
CS 374 (first offering at scale: 400 students)
CS 473 (last offering in present form)
CS 473 revised version (first offering as CS 498; limited enrollment)
Every semester thereafter
CS 374
CS 473 (revised version)
Other 400- and 500-level theory courses in development