Probabilistic Methods for Algorithmic Discrete Mathematics