100 likes | 286 Views
TCSS 440/540: Theory of Computation. An Introduction. What is this course about?. Suppose I give you 1,000,000 processors (2 GHz), 10 TB of memory, and a network to connect them. What can you compute and how fast?
E N D
TCSS 440/540: Theory of Computation An Introduction
What is this course about? • Suppose I give you 1,000,000 processors (2 GHz), 10 TB of memory, and a network to connect them. What can you compute and how fast? • How much does your answer change if I give you 2,000,000 processors and 20 TB? • Imagine if we connected all computers on UWT campus and used them as one big computer. What could you compute and how fast?
In other words … • What are the capabilities and limitations of computers? • How would you even begin to answer these questions?
One Approach • Empirical approach: build what you can, program, tinker, etc. • Problem: No matter how good your program is, how will you know whether there is a better program out there that you have not thought of or whether there is no such program?
Another Approach • Analytical approach: Develop a formal model of your computer and prove things about your model. • Abstraction. • We already do abstraction to some extent. We don’t think about electrons travelling in wires or the effect of temperature or the color of the power cord when we program (someone else has to think about these things, though!)
More abstraction • Memory hierarchy: caches, main memory, disks • Technological properties of the computer: Silicon, fiber optics, magnetic properties • We abstract them away (for now). • [picture of scary monster goes here]
Areas of Theoretical Computer Science • Complexity Theory: Why are some problems harder than others? • For example, • searching for numbers in an array (EASY) • sorting a list of numbers (HARDER, but still pretty EASY) • Traveling salesperson problem (VERY HARD) • Factoring a 500-digit number (seems to VERY HARD but it might be EASY)
Computability Theory: What is computable? • Some problems have no algorithmic solution • Given an arbitrary mathematical statement, determine whether it is true or false • Halting problem • Program correctness (applications to software development)
Automata Theory • Finite automata • Text processing, compilers, hardware design • Context-free grammars • Programming languages, compilers • Natural language processing (AI)
What You Should Get Out of This Course • Direct experience with the process of abstraction. • Exposure to elegance in computation and heightened aesthetic sense when you build real systems. • Exposure to some of the philosophical issues in computer science. • Some of the tools/techniques needed for other courses. Problem solving skills. • A different view of computation.