Complexity theory offers a variety of concise computational models for
computing boolean functions - branching programs, circuits, decision trees and
ordered binary decision diagrams to name a few. A natural question that arises
in this context with respect to any such model is this:
Given a function f:{0,1}^n \to {0,1}, can we compute the optimal complexity
of computing f in the computational model in question? (according to some
desirable measure).
A critical issue regarding this question is how exactly is f given, since a
more elaborate description of f allows the algorithm to use more computational
resources. Among the possible representations are black-box access to f (such
as in computational learning theory), a representation of f in the desired
computational model or a representation of f in some other model. One might
conjecture that if f is given as its complete truth table (i.e., a list of f's
values on each of its 2^n possible inputs), the most elaborate description
conceivable, then any computational model can be efficiently computed, since
the algorithm computing it can run poly(2^n) time. Several recent studies show
that this is far from the truth - some models have efficient and simple
algorithms that yield the desired result, others are believed to be hard, and
for some models this problem remains open.
In this thesis we will discuss the computational complexity of this question
regarding several common types of computational models. We shall present
several new hardness results and efficient algorithms, as well as new proofs
and extensions for known theorems, for variants of decision trees, formulas and
branching programs