10.2. Reductions¶
10.2.1. Reductions¶
This module introduces an important concept for understanding the relationships between problems, called reduction. Reduction allows us to solve one problem in terms of another. Equally importantly, when we wish to understand the difficulty of a problem, reduction allows us to make relative statements about upper and lower bounds on the cost of a problem (as opposed to an algorithm or program).
Because the concept of a problem is discussed extensively in this chapter, we want notation to simplify problem descriptions. Throughout this chapter, a problem will be defined in terms of a mapping between inputs and outputs, and the name of the problem will be given in all capital letters. Thus, a complete definition of the sorting problem could appear as follows:
SORTING
Input: A sequence of integers x0,x1,x2,…,xn−1.
Output: A permutation y0,y1,y2,…,yn−1 of the sequence such that yi≤yj whenever i<j.
Input: An unsorted array of records: R1, R2, ..., Rn with associated key values: K1, K2, ..., kn.
- K10
- K21
- K32
- K43
- K54
- K65
Algorithm
10.2.1.1. Reduction and Finding a Lower Bound¶
There is another use for reductions aside from applying an old algorithm to solve a new problem (and thereby establishing an upper bound for the new problem). We can use reductions to prove a lower bound on the cost of a new problem by showing that it could be used as a solution for an old problem with a known lower bound.

Figure 10.2.1: The general process for reduction shown as a “blackbox” diagram.¶