Introduction to Algorithms by Thomas H. Cormen