Primal-Dual Algorithms for Combinatorial Optimization Problems