Beyond Worst Case Analysis in Approximation Algorithms