Approximation Algorithms For Np Hard Problems