Algorithms : Sequential, Parallel, and Distributed