Production Scheduling: Complexity and Approximate Algorithms