Optimal Algorithmic Cooling of Spins