1. Prologue; 2. A warm-up!; 3. Random sampling; 4. List ranking; 5. Sorting atomic items; 6. Set intersection; 7. Sorting strings; 8. The dictionary problem; 9. Searching strings by prefix; 10. Searching strings by substring; 11. Integer coding; 12. Statistical coding; 13. Dictionary-based compressors; 14. The burrows-wheeler transform; 15. Compressed data structures; 16. Conclusion.
This book covers algorithmic problems in big data applications, presenting solutions over hierarchical-memory systems along with pseudocode.
Paolo Ferragina is Professor of Algorithms at the University of Pisa, with a post-doc at the Max-Planck Institute for Informatics. He served his university as Vice Rector for ICT (2019–22) and for Applied Research and Innovation (2010–16) and as the Director of the PhD program in Computer Science (2018–20). His research focuses on designing algorithms and data structures for compressing, mining, and retrieving information from big data. The joint recipient of the prestigious 2022 ACM Paris Kanellakis Theory and Practice Award and numerous international awards, Ferragina has previously collaborated with AT&T, Bloomberg, Google, ST microelectronics, Tiscali, and Yahoo. His research has produced several patents and has featured in over 170 papers published in renowned conferences and journals. He has spent research periods at the Max Planck Institute for Informatics, the University of North Texas, the Courant Institute at New York University, the MGH/Harvard Medical School, AT&T, Google, IBM Research, and Yahoo.
'When I joined Google in 2000, algorithmic problems came up every
day. Even strong engineers didn't have all the background they
needed to design efficient algorithms. Paolo Ferragina's
well-written and concise book helps fill that void. A strong
software engineer who masters this material will be an asset.'
Martin Farach-Colton, Rutgers University
'There are plenty of books on Algorithm Design, but few about
Algorithm Engineering. This is one of those rare books on
algorithms that pays the necessary attention to the more practical
aspects of the process, which become crucial when actual
performance matters, and which render some theoretically appealing
algorithms useless in real life. The author is an authority on this
challenging path between theory and practice of algorithms, which
aims at both conceptually nontrivial and practically relevant
solutions. I hope the readers will find the reading as pleasant and
inspiring as I did.' Gonzalo Navarro, University of Chile
'Ferragina combines his skills as a coding engineer, an algorithmic
mathematician, and a pedagogic innovator to engineer a string of
pearls made up of beautiful algorithms. In this, beauty dovetails
with computational efficiency. His data structures of Stringomics
hold the promise for a better understanding of population of
genomes and the history of humanity. It belongs in the library of
anyone interested in the beauty of code and the code of beauty.'
Bud Mishra, Courant Institute, New York University
'There are many textbooks on algorithms focusing on big-O notation
and general design principles. This book offers a completely unique
aspect of taking the design and analyses to the level of
predictable practical efficiency. No sacrifices in generality are
made, but rather a convenient formalism is developed around
external memory efficiency and parallelism provided by modern
computers. The benefits of randomization are elegantly used for
obtaining simple algorithms, whose insightful analyses provide the
reader with useful tools to be applied to other settings. This book
will be invaluable in broadening the computer science curriculum
with a course on algorithm engineering.' Veli Makinen, University
of Helsinki
![]() |
Ask a Question About this Product More... |
![]() |