Analysis and design of algorithms for combinatorial problems