The two most popular strategies are:
Different strategies may result in a different number of reductions steps, and take different paths through the expression's reduction graph.
Call-by-name always finds a value, if there is one, where Call-by-value is generally more efficient, but may fail to find a value.
Haskell uses a strategy called lazy evaluation, which guarantees that if an expression has a normal form, the evaluator will find it. Lazy evaluation = call-by-name + sharing.