This research investigates finding fast algorithms for constraint satisfaction problems. A constraint satisfaction problem is one in which a series of constraints is imposed on a set of discrete variables. The task is to find a set of values for all the variables that satisfies all the constraints simultaneously. For example, when scheduling traffic lights each light may be in one of only three discrete states. Furthermore, there are constraints on the states of the traffic lights that require that no two cross-streets get green lights at the same time. A constraint satisfaction problem may have thousands of variables and thousands of constraints. Constraint satisfaction problems arise in diverse areas. These include generating tests of correctness for electronic circuits, understanding line drawings by computer, solving combinatorial problems, and predicting the folding of RNA molecules. The set of constraint satisfaction problems is one of the NP complete problem sets, so it is unlikely that a fast algorithm for all constraint satisfaction problems will ever be found. Indeed, brute force algorithms for constraint satisfaction problems may be extremely slow. Nonetheless, algorithms have been found that are fast for most problems in certain NP complete problem sets. This research concerns finding and characterizing the algorithms and problem sets for which constraint satisfaction problems can be solved quickly, with the aim of finding general algorithms that are fast over as wide a range of problem sets as possible.