# Theory of Computation (Grad)

## (CS 6160) - Spring 2019

## Objectives and Overview

**Goals.** The goal of this course is to develop skills that allow formally arguing about computation; namely the nature of algorithms and resources used in computing. This involves knowing how to define the notion of algorithm in a formal way in various settings and how to use the right theoretical tools to argue about their validity and complexity. You can find more details the syllabus file.

**Pre-reqs.** The key is to be comfortable with math concepts and proofs.
However, no prerequisites are enforced, yet being familiar with concepts of CS 3102 (theory of computation), CS 2102 (Discrete Math), and Algorithms (CS 4102) will be helpful.

**Logistics.** We will meet Fridays 2pm-4:45pm, Olsson Hall 011.

Office hours: Always possible to be arranged by email. Default times: Weds 10:30am--11:45am and after class on Fridays.

## Lectures

You can find specifics posts for each lecture here. For each class you can find suggested readings as well as slides of the class (accessible through collab).

## Homeworks, exams, and grading

There will be a take-home final exam (25%) a take home midterm (25%), class participation and contribution (20%), and 2 assignments (30% = 15% each) done perhaps in groups with independent submissions. There will be an extra (20%) that can be obtained by giving a nice presentation on a relevant topic not covered in class. The homeworks and the exams will be submitted through collab.

## Textbook(s) and content

There will be two main sources, though we might use others as well. The first one is

Introduction to the Theory of Computation by Michael Sipser (3rd Edition)

and the second one is

Computational Complexity A Modern Approach, by Sanjeev Arora and Boaz Barak.