  Routing and scheduling problems are fundamental problems in combinatorial
optimization, and also have many applications. Most variations of these
problems are NP-Hard, so we need to use heuristics to solve these problems on
large instances, which are fast and yet come close to the optimal value. In
this thesis, we study the design and analysis of approximation algorithms for
such problems. We focus on two important class of problems. The first is the
Unsplittable Flow Problem and some of its variants and the second is the
Resource Allocation for Job Scheduling Problem and some of its variants. The
first is a packing problem, whereas the second is a covering problem.
