82 3 Polynomial-time Reductions
Examples of value functions include the size of a clique in a graph, the amount
of flow in a network (with link capacities), and so on. The task may be to
find a clique of size exceeding a given threshold in a given graph or to find a
maximum-size clique in a given graph. Note that in these examples, the “base”
search problem (i.e., the relation R) is quite easy to solve, and the difficulty
arises from the auxiliary condition on the value of a solution (presented in R
f
and R
f
). Indeed, one may trivialize R (i.e., let R(x) ={0, 1}
poly(|x|)
for every
x), and impose all necessary structure by the function f (see Exercise 3.6).
We confine ourselves to the case that f is (rational-valued and) polynomial-
time computable, which in particular means that f (x, y) can be represented by
a r ational number of length polynomial in |x|+|y|. We will show next that
in this case, the two aforementioned search problems (i.e., of R
f
and R
f
)are
computationally equivalent.
Theorem 3.5: For any polynomial-time computable f : {0, 1}
∗
×{0, 1}
∗
→Q
and a polynomially bounded binary relation R,letR
f
and R
f
be as in Eq. (3.1)
and Eq. (3.2), respectively. Then, the search problems of R
f
and R
f
are com-
putationally equivalent.
Note that for R ∈ PC and polynomial-time computable f , it holds that R
f
∈
PC. Combining Theorems 3.2 and 3.5,itfollowsthatin this case both R
f
and R
f
are reducible to NP. We note, however, that even in this case it does
not necessarily hold that R
f
∈ PC (unless, of course, P = NP). See further
discussion following the proof.
Proof: The search problem of R
f
is reduced to the search problem of R
f
by
finding an optimal solution (for the given instance) and comparing its value to
the given threshold value. That is, we construct an oracle machine that solves
R
f
by making a single query to R
f
. Specifically, on input (x, v), the machine
issues the query x (to a solver for R
f
), obtaining the optimal solution y (or an
indication ⊥ that R(x) =∅), computes f (x, y), and returns y if f (x,y) ≥ v.
Otherwise (i.e., either y =⊥or f (x,y) <v), the machine returns an indication
that R
f
(x,v) =∅.
Turning to the opposite direction, we reduce the search problem of
R
f
to the search problem of R
f
by first finding the optimal value v
x
=
max
y∈R(x)
{f (x, y)} (by binary search on its possible values), and next finding
a solution of value v
x
. In both steps, we use oracle calls to R
f
. For simplicity,
we assume that f assigns positive integer values (see Exercise 3.7), and let
= poly(|x|) be such that f (x, y) ≤ 2
− 1 for every y ∈ R(x). Then, on
input x, we first find v
x
= max{f (x, y):y ∈R(x)}, by making oracle calls of