Monday, February 2Problem ReductionsWe did a general discussion of what a problem reduction is. The intuition is that a reduction is a way of converting one problem, A, into another problem B, such that a solution to B can be used to solve A. There are various ways this could be done. One would be to modify the solution for B so that it becomes a solution for A. That would be like changing the structure of a program so that it now takes instances of A as input and provides the correct answer for each instance. This approach is not easy to describe formally (e.g., how far can you go with the modifications?) A more formal way is to define a mapping reduction that takes instances a of problem A and turns them instances b to problem B such that a is in A if and only if b is in B. That way a solution to B is also a solution to A by way of the map. Notice that this only works for decision problems in general. A reduction in this case is a Turing machine. This machine converts all instances of A into instances of B as noted. If we further restrict the time/space complexity of the reduction Turing machine then we will also be able to make statements like, "B must be at least as computationally hard as A" because we can efficiently convert instances of a to instances of B so an efficient solution to B implies an efficient solution to A. We gave lots of examples as well. Turing ReducibilityTuring reducibility is a concept that appeared in the theory of computing class. It has no real relevance to complexity theory, as it has to do with decidability. Turing reducibility involves the use of oracles, which is well beyond the realm of complexity theory for problems that actually have solutions. |