Introduction To Algorithms by Thomas H. Cormen, Stein Clifford & Charles E. Leiserson