Required reading: The introductory reading 01-intro-reading.pdf is available on Moodle..
Example code: class01-programs.zip. (Individual programs are also available from the list of all sample code.)
Instructions for editing and running Python programs on the lab machines. (These instructions were written for people with no CS background, so I apologize if they seem unnecessarily laborious.)
Some essential practice exercises:
Note on Python versions: All example code will work with Python version 2.x. You can use Python 3.x if you want, but you will need to change print ... to print(...), and maybe some other things too.
Lecture notes: class02-impossible-programs.pdf.
Source code: class02-programs.zip.
Note that a hint was added to the homework assignment. Make sure to get the latest version.
Lecture notes: class03-turing-machines-v1.1.pdf.
Minilab: using JFLAP,
Lecture notes: class04-universal-turing-machines.pdf.
Source code: class04-programs-v2.zip.
Minilab:
Lecture notes: class05-reductions-notes-v2.pdf. (version 2 uploaded 4pm, 2/3/14.)
Please note the discussion about homework deadlines posted on the homework page.
Lecture notes: class06-rices-theorem-v2.pdf.
HW1 solutions are available on Moodle.
A single reading for this class and the next class is available on Moodle.
This class covers the second half of the reading posted on Moodle.
A single reading for Topic 5 (classes 9-12) is available on Moodle.
Example code for today: findMultiples.py
Solutions to homework assignment 3 have been posted to Moodle.
Some details about Thursday's exam are available from a link on the main course page (you may need to hit refresh to view it).
The reading for this topic has been significantly updated. Please download a new copy from Moodle. (The filename is classes09-11-complexity-basics-v2.pdf).
Homework assignment 5 is available, and after today's class, we have covered everything you need to attempt this assignment.
Exam solution is on Moodle.
The reading for this topic has been updated again (sorry!). Please download a new copy from Moodle. (The filename is classes09-11-complexity-basics-v3.pdf).
A reading is available on Moodle (filename linz-dfas-pages38-47.pdf).
Additional notes: a one-page note giving the formal definition and examples of a language, languages.pdf.
A reading is available on Moodle (filename linz-regexps-pages71-75.pdf).
Lecture notes: class15-pumping-lemma.pdf.
Please take the class survey.
Today's class consists mostly of independent work on homework and exam revision. I will be available to answer questions.
In addition, we can check out a few demos of working with dfas and regular expressions. JFLAP has facilities for converting between dfas and regexps, and there are various online resources, such as the HackingOff regexp-to-dfa converter.
A reading is available on Moodle (filename class17-nondeterminism.pdf).
Example code and input files are available as class17-programs.zip.
Lecture notes: class19-nfas-v3.pdf (version 3 uploaded 4/8/14).
Lecture notes: class20-polycheck-defn.pdf.
Lecture notes: class21-polycheck-npoly-equiv.pdf and class21b-three-problems.pdf.
Lecture notes: class22-polytime-reductions.pdf.
Don't forget to finish the Golden Ticket excerpt from Lance Fortnow's book before our next class. (The excerpt is available on Moodle.)
Lecture notes: class23-p-equals-np.
Lecture notes: class24-more-np-completeness.pdf.
Required reading: the excerpt from Chapter 4 of The Annotated Turing by Charles Petzold, available on Moodle.
Optional reading: read Sections 1-3 of Turing's original 1936 paper On Computable Numbers..., also available on Moodle.
Ungraded in-class project: over the next three classes, use JFLAP to develop one or more Turing machines that do something interesting. Suggestions include:
Required reading: Chapter 11 of The Annotated Turing by Charles Petzold, available on Moodle.
Required reading: Richard Karp's 1972 paper, Reducibility Among Combinatorial Problems, available on Moodle. Obviously, you're not expected to understand all details of this paper. Here's what you should do to prepare for our discussion: