This is a compact survey of a large number of contemporary and historical variable-length codes. In a variable-length code, shorter codes are assigned to more frequently occurring symbols.
The book starts with an introductory chapter that classifies data compression algorithms into four classes (block-to-block, block-to-variable, variable-to-block, and variable-to-variable codes). Following this, basic codes are introduced. Topics include prefix codes, entropy, redundancy, and universal codes. This chapter concludes by describing the well-known Huffman coding. The second part of the book explores more than 20 advanced codes. They include the start/stop codes, Elias codes, location-based encoding, Wang’s flag code, and additive codes. The third and final chapter of the book describes robust codes. These are codes that can detect and correct errors, as well as limit the propagation of errors. Some of the codes covered include synchronous prefix codes, resynchronizing Huffman codes, and variable-length, error-correcting codes.
I think the greatest contribution of this book is that it brings together and describes such a large number of codes in a succinct manner. Most computer scientists are familiar with coding. However, this book introduces the reader to many lesser-known codes, and conveys an appreciation for the wide variety of codes that exists. The reader should note that the author focuses on the principles underlying the codes instead of describing the implementation in detail; source code is not presented. Along with the text, the author includes many diagrams and examples to explain how the algorithms work.
In summary, this is a great book for someone new to coding, as well as for someone who just wants to catch up on some of the more contemporary codes.