Analysis and Design of Algorithms for Combinatorial Problems