This textbook explains the concepts and techniques required to write programs that can handle large amounts of data efficiently. Project-oriented and classroom-tested, the book presents a number of important algorithms--supported by motivating examples--that bring meaning to the problems faced by computer programmers. The idea of computational complexity is introduced, demonstrating what can and cannot be computed efficiently at scale, helping...