By the time students reach the end of a course on algorithm design,
they are starting to ask questions about what computers can and cannot do:
Is there a polynomial-time algorithm for every computational problem?
Can every problem be solved using dynamic programming?
Can every problem be formulated as a graph problem?
What is a Computer and What Can It Do? takes advantage of the students'
curiosity by answering their questions in the context in which they naturally arose:
What is a Computer and What Can It Do? is intended to serve as the primary
textbook in an undergraduate course for computer science majors at the junior or senior
level. Students should have previously taken a sophomore-level course in algorithms that
includes a discussion of graph algorithms. This book may also be useful for people in
fields other than computer science who have some background in algorithm design and who
would like to develop an understanding of the main ideas of theoretical computer science
without getting bogged down in minutiae.
What is a Computer and What Can It Do? is short so that students can stay
focused on understanding the problems that computers can and cannot solve rather than
becoming overwhelmed by the details of automata theory and formal languages. This book
is not a reference for professors. It is written for students to read ... and enjoy.