Course description for CS 173

Course Topics

This course is an introduction to the theoretical side of computer science. In it, you will learn how to construct proofs, as well as read and write literate formal mathematics. You will also get a quick introduction to key theory topics, particularly analysis of algorithm running times. And you will also become familiar with a range of standard mathematics concepts commonly used in computer science.


This course is designed for students who have a C- or above in introductory programming for CS/CE majors (CS 125 or ECE 220) and in one term of calculus (Math 220 or 221). If you have a grade below B- in either of these courses, you will probably find this course extremely hard unless you have some additional background. For example, if you got a C in Calculus I, it's best to do Calculus II before this course.

This course makes only very limited use of calculus. However, it assumes a strong fluency with precalculus mathematics (algebra, plane geometry, trigonometry, logarithms, and similar). Calculus courses help develop this fluency, as do some other technical courses (e.g. physics).

This course requires you to analyze algorithms written in "pseudo-code." We assume that you have taken an introductory programming but the choice of programming language (e.g. C vs. Java) does not matter. You should have written programs that manipulate the contents of arrays (e.g. sort an array of numbers) and programs that manipulate linked lists or other pointer-based data structures. You should also have written programs that are recursive, i.e. in which a function (aka procedure aka method) calls itself.

If you aren't sure whether you have the right background, contact us for advice.

Lectures and Discussion Sections

This course has pre-recorded lectures. Its two 75-minute class periods are used for giving examlets (starting in week 3) and tutorials. See the official registration system for the specific times that various sections will meet. Tutorials are required and tutorial attendance contributes to your final grade.


Announcements are made in lecture and/or on our Piazza forum. Information about exams can be found on your lecture's Exams page. You are encouraged to use Piazza to discuss concepts, homework problems, and the like. However, you may not post solutions to graded problems (e.g. exams, homeworks) that folks may still be working on. Even after the standard deadline, some of your classmates may still be working due to extensions. If you aren't sure whether it's appropriate to post something, consult the course staff.

On-line resources

We will be using

To sign up for CS 173 on piazza, you will need to use your (netID) email. If you have some reason why you don't want piazza to know your U. Illinois email, contact an instructor to be added under an alternate email address.

Most of you have been automatically registered for CS 173 on moodle. If not, get onto moodle and enroll yourself. (See our top-level web page for the enrollment key.) Either use the search box or look under the LAS college in the hierarchical tree of courses. If you aren't yet registered, pick the most likely lecture.


The official course text is Building Blocks for Theoretical Computer Science (Version 1.3b).