Syllabus for CIT 596

```CIT 596
• Theory of computing
• Traditional course (CIS 511, CIS 262) and other similarly named
courses in other universities are divided into 3 parts that are
covered in this order
– Automata and languages
– Computability
– Complexity
• The traditional course can be too theoretical so
I’m going to experiment a bit
• Basically I want to throw in a little bit of algorithms/programming
Syllabus for CIT 596
• Finite state machines/ finite automata(Chapter 1 of Sipser)
– DFA, NFA
– NFA and DFA equivalence
– Regular expressions
• Context free grammars and PDAs (Chapter 2 of Sipser)
– Ignore the part concerning deterministic PDA
• Turing machines (Chapter 3)
• What is computable in a reasonable time? (CLRS)
– Complexity analysis
– P vs NP
– NP completeness reductions
• What is not computable? (Chapter 5)
– OMG computers cannot do everything!
Expectations of the course
•
•
•
•
The intent is to make this course a little easier than 592
Proofs will be somewhat deemphasized.
The course is still theoretical
For a more theoretical foundation, take 511
– Could prove to be important if you want to move on to do
a masters in CIS/PhD in CIS
• Often, it is hard to see the real relationship with
modern software engineering (I will try and provide
some motivation)
• Compilers, parsers do use these concepts but we need
to do more work to get to that level.
Why should I do this course?
• Understanding how far CS has come
• If you like history and if you like math, Alan Turing is an interesting
(and tragic ) story
http://podbay.fm/show/283605519/e/1347302054?autostart=1
• Regular expressions are useful
• How do I prove a solution for something does not exist!
• How do I prove something cannot be solved efficiently and then
start looking for approximation algorithms
• Interesting to see which problems can be solved efficiently and
which cannot
– Shortest path v longest path
– Eulerian tours v Hamiltonian cycles
• We will revisit graph theory from an algorithmic perspective
• http://stackoverflow.com/questions/1968153/theory-ofcomputation (join the debate ...)
Resources
• Office hours
– Wednesday 10-11
– Wednesday 3:30-4:30
• Any of the white space on my schedule
http://www.seas.upenn.edu/~bhusnur4/mySchedul
e.png
• TAs (office hours TBD)
– Honglin
– Aixuan Yang
• 2 midterms – a month from today and then 2 months
from today
• Final (will be cumulative)
• Homeworks
– Mostly written HW and some programming assignments
– More programming assignments when we get to the
complexity part of the course
– Homeworks handed out on Tuesday and due the next
Tuesday
• The weightage of each is TBD
– Happy to take your feedback regarding this
Books for TOC
• Introduction to the Theory of Computation –
Sipser
• A discrete math textbook of your choice in
order to recall induction proofs
– Rosen
– Stein et al
– Scheinerman
• Introduction to Automata Theory, Languages
and Computation – Hopcroft et al
Books for the complexity theory part
• CLRS – Cormen, Rivest, etc
– Considered one of the classics for algorithms
– Useful to purchase it even though it is used for
only a portion of the course
– http://tberg.dk/books/Introduction_to_algorithm
s_3rd_edition.pdf
• http://www.cs.berkeley.edu/~vazirani/algorith
ms/chap8.pdf
Software for the course
• JFLAP - http://www.jflap.org/
• Free software that can be used to draw some
of the ‘machines’ that we develop in this
course
• Trust me, this software package is fun
• The source code is in Java, so we might even
try tinkering with it to give you practice in Java
```