We begin with the topic of hashing for a number of reasons. First, classical hash tables have proved irreplaceable in modern systems, making it harder to find a system that does not use them than one that does. Second, recently there has been a lot of innovative work addressing algorithmic issues that arise as hash tables grow to fit massive data, such as efficient resizing, compact representation, and space-saving tricks. In a similar vein, hashing has over time been adapted to serve in massive peer-to-peer systems where the hash table is split among servers; here, the key challenge is the assignment of resources to servers and the load balancing of resources as servers dynamically join and leave the network. Lastly, we begin with hashing because it forms the backbone of all the succinct data structures we present in part 1 of the book.