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 – Podcast about it 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 Grading • 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