An algorithm used to find the optimal solution in problems that may have a very large number of possible solutions. Begins by splitting the possible solutions into a number of exclusive subsets and limits the number of subsets that need to be examined in searching for the optimal solution by a number of different strategies.