Parallel and Distributed Computing by Claudia Leopold