Complexity and Problem Solving