# Theory Of Computation : A Problem Solving Approachl

Before coming I gave them a list of possibletopics to talk about, and I was pleasantly surprised when they selectedtheory of computation, both since of course, it is always great to beable to talk about theory (especially in the evening for one of theHacker Schoolers 21st birthday), and because it gives me anot-as-shameless-as-usual opportunity to plug my favorite book. (I do, it seems,have a low barrier for shameless plugging, and find ways to plug it atmost talks Igive these days!)

## Theory Of Computation : A Problem Solving Approachl

Let's think about modeling the processing that our suffering 3rd-graderis doing solving long addition problems. The "computer" has somescratch paper for keeping track of what he is doing, with a pencil forwriting symbols on the scratch paper.

This focus takes a rigorous, mathematical approach to computational problem-solving: students will gain a deep understanding of algorithm paradigms and measures of problem complexity, and develop the skills necessary to convey abstract ideas with precision and clarity. Many of our students go on to graduate studies and sophisticated algorithmic work in industry. This focus has natural ties with many branches of mathematics and is the foundation of many computer science fields. Consequently, our students often apply their theoretical knowledge to other fields of interest.

Real-world computers perform computations that by nature run like mathematical models to solve problems in systematic ways. The essence of the theory of computation is to help develop mathematical and logical models that run efficiently and to the point of halting. Since all machines that implement logic apply TOC, studying TOC gives learners an insight into computer hardware and software limitations.

This theoretical computer science branch is all about studying the cost of solving problems while focusing on resources (time & space) needed as the metric. The running time of an algorithm varies with the inputs and usually grows with the size of the inputs.

Measuring complexity involves an algorithm analysis to determine how much time it takes while solving a problem (time complexity). To evaluate an algorithm, a focus is made on relative rates of growth as the size of the input grows.

Class P: The class P consists of those problems that are solvable in polynomial time. These are problems that can be solved in time O(n^k) for some constant k where n is the input size to the problem. It is devised to capture the notion of efficient computation.

A major contributor to the complexity theory is the complexity of the algorithm used to solve the problem. Among several algorithms used in solving computational problems are those whose complexity can range from fairly complex to very complex.

Good understanding of the Theory of Computation helps programmers and developers express themselves clearly and intuitively, thus avoiding entering into potentially uncomputable problems while working with computational models.

The basic concepts of the theory of computation are studied. Topics include models of computation, polynomial time, Church's thesis; universal algorithms, undecidability and intractability; time and space complexity, nondeterminism, probabilistic computation and reductions of computational problems.

You are allowed, and indeed encouraged, to collaborate with other students on solving most of the homework problems. However, you must write the solutions independently in your own words. Details of the collaboration policy may be found here: Collaboration and Honesty Policy.

There are a number of AI tasks that we could brute-force. For example, we could write a program that would be really, really good at solving computer vision problems: if we had an indestructible box that produced pictures and questions about them, waited for answers, scored the answers for accuracy, and then repeated the process, then we know how to write the program that interacts with that box and gets very good at answering the questions. (The program would essentially be a bounded version of AIXI.)

The point of developing a formal understanding of a problem is not to run the resulting algorithms. Deep Blue did not work by computing a full game tree, and DeepMind is not trying to implement AIXI. Rather, the point is to identify and develop the basic concepts and methods that are useful for solving the problem (such as game trees and backtracking search algorithms, in the case of chess).

The recent focus on computational thinking as a key 21st century skill for all students has led to a number of curriculum initiatives to embed it in K-12 classrooms. In this paper, we discuss the key computational thinking constructs, including algorithms, abstraction, and automation. We further discuss how these ideas are related to current educational reforms, such as Common Core and Next Generation Science Standards and provide specific means that would allow teachers to embed these ideas in their K-12 classrooms, including recommendations for instructional technologists and professional development experts for infusing computational thinking into other subjects. In conclusion, we suggest that computational thinking ideas outlined in this paper are key to moving students from merely being technology-literate to using computational tools to solve problems.

Another set of CT concepts that provides an opportunity to introduce computational thinking concepts across core content areas is data collection/data analysis/data representation. For example, a social studies teacher can use data from most-used words from presidential inaugural speeches from 1789 to 2009 (Source: ) and have students analyze differences between the speeches across an era or between Democratic and Republican presidents. Similarly, science teachers can have students explore international and United States greenhouse emission data sets from Google Public Data Explorer ( ) to compare emission rates across states, countries, and even economic sectors (agriculture, energy, industrial processes, and waste). The ability to make sense of data to identify solutions to problems is a key computational thinking skill. It can also provide access to significant career opportunities given that jobs requiring computing skills are expected to grow from 1.9 million to 4.4 million by 2017 alone (Big Data Jobs Index, 2016).

Abstraction is another key computational thinking idea that can be embedded in the classroom. Abstraction involves the ability to generalize and transfer a solution from one problem to other similar problems. Abstraction also involves developing and representing models of the real world (such as using a physical model that represents our solar system or a simulation that shows how populations respond to situations such as disease outbreaks). Building on our prior example of data analysis and representation, abstraction could be practiced in science classrooms by teachers engaging students in analyzing data to draw conclusions and develop general principles.

While working with inservice teachers to embed CT in elementary and secondary classrooms is important, we also need to introduce computational thinking for preservice teachers in their teacher education programs. Within teacher education curricula, preservice teachers could learn about computational thinking in core courses (such as, learning theory and educational technology courses) and then expand their understanding about how computational thinking applies in a particular subject through teaching methods courses in their licensure areas.

Whether you like it or not, whether you are going to bea mother, father,teacher, computer programmer, scientist, researcher, business owner,coach,mathematician, manager, doctor, lawyer, banker (the list can go on andon), problem solving is everywhere. Some peoplethinkthat you either can do it or you can't. Contrary to that belief,it can be a learned trade. Even the best athletes and musicianshadsome coaching along the way and lots of practice. That's what italso takes to be good at problem solving.

George Polya, known as the father of modern problem solving, did extensive studies and wrote numerous mathematical papers and three books about problem solving. I'm going to show you his method of problem solving to help step you through these problems.

In the theory of computation, the problem of finding the solution of an instance, referred to as a optimisation version of the KP, is distinguished from the problem of deciding whether a given target value or greater is obtainable, referred to as the decision version. Given that the optimisation version of KP is NP-hard and the decision version is NP-complete, we wanted to determine whether participants who found the solution knew that they found the solution, and found it again in the second attempt. To test this, we examined their second attempts at the same instance. Among participants who found the solution in their first attempt, 31.2% did not solve the instance in the second attempt (Supplementary Results 2.9), which suggests that participants mostly were not aware that they had found the solution.

It has often been argued that humans resort to heuristics in order to solve complex problems23. Two questions have remained unanswered, however: (i) What type of complexity affects human decision-making? (ii) Are the heuristics humans use, adapted to this complexity? Here, we investigated how computational complexity affects human decision-making. We discovered that various measures of complexity explained computational performance, and hence, difficulty. Most prominently, the Sahni-k measure predicted success. This measure increases in the minimal number of items over which a combinatorial search has to be performed before the remainder of the knapsack can be filled using the greedy algorithm and the optimal solution can be attained.

The concept of computational complexity is defined with regards to mathematical models of computation, such as a Turing machine, an ideal model of computation. Our results demonstrate clearly that computational complexity, and hence the theory of computation, does help to understand when and how complexity impacts human decision-making. Our results were obtained in the context of the KP, a canonical example of a complex computational and decision problem, and future research should investigate to what extent computational complexity affects human behaviour in other problems.