Algorithmic fair allocation of indivisible items