Topics in discrete optimization: models, complexity and algorithms