"This small volume is a step-by-step introduction to algorithms, their implementation, efficiency and run time. Requiring only basic mathematical knowledge, it aims at teaching how to transform ideas into executable programs, giving several solutions to common tasks, taken from topics of our everyday world." (Dieter Riebesehl, zbMATH 1402.68003, 2019)
"The book is organized by application or problem area rather than by algorithm type, and covers a good variety of topics in a small space. It leans toward areas that have caught the public imagination, such as Big Data, web search, and cryptography. In each subject area the problem is described first, followed by a text description of algorithms to solve it, and completed with one or more pseudocode listings." (Allen Stenger, MAA Reviews, January, 26 , 2019)
A Brief Historical Outline.- A Problem with Which to Begin.- Algorithms and Coding.- The Tournament.- A Financial Problem.- Secret Messages.- Putting Things in Order.- "Easy" and "Difficult" Problems.- Search Engines.- Data Compression.- Recursion.
Paolo Ferragina is a professor of algorithmics and the director of the PhD program in Computer Science at the University of Pisa. Previous university appointments include Vice Rector of Applied Research and Innovation, President of the IT Center, and Vice Chair of the Department of Computer Science. His research is on designing algorithms and data structures for storing, compressing, mining, and retrieving information from Big Data, in collaboration with companies such as Google, Bloomberg, Yahoo!, and STMicroelectronics. He has received international awards for his research, including the “Best Land Transportation Paper Award" from the IEEE Vehicular Technology Society (1995); the EATCS Doctoral Dissertation Thesis Award (1997); the Philip Morris Award for Science and Technology (1997); the Yahoo! Faculty award (2007-2011); and the Google Faculty Research Award (in 2010, 2012 and 2016). He has held postdoctoral or visiting research positions at the Max-Planck-Institut für Informatik (Saarbrücken), the University of North Texas, the Courant Institute at New York University, AT&T, Yahoo!, Google, and IBM Research. He has been a committee member of the top international conferences in algorithmics and information retrieval, and an invited speaker at conferences such as CPM, SPIRE, ESA/ALGO, and ECIR. He has been a guest editor or area editor for journals such as Theoretical Computer Science, Information Retrieval, Theory of Computing Systems, the Journal of Graph Algorithms and Applications, and the Encyclopedia of Algorithms.
Fabrizio Luccio is an emeritus professor of computer science at the University of Pisa. He received his Dr. Ing. degree in electrical engineering from the Politecnico di Milano in 1962. After industrial experience with Olivetti, he worked at MIT, the University of Southern California, and New York University, researching theoretical and algorithmic aspects of logical network synthesis. He has been at the University of Pisa since 1971, as a lecturer, professor of informatics, department chair, and coordinator of the PhD program. He was also responsible for international relations on development, and he actively supported UNESCO projects for the dissemination of informatics at university level in developing countries. He has been a visiting professor or scientist at the IBM T.J. Watson Research Center, the NTT LSI Laboratories, UCLA, the University of Illinois, the National University of Singapore, the University of Hawaii, and Carleton University in Ottawa. His main research interests are algorithm design in sequential, parallel, and distributed environments, and the relationship between abstract computational models and realistic computers and circuits. He is a Life Fellow of the IEEE.
This book offers a gentle motivation and introduction to computational thinking, in particular to algorithms and how they can be coded to solve significant, topical problems from domains such as finance, cryptography, Web search, and data compression.
The book is suitable for undergraduate students in computer science, engineering, and applied mathematics, university students in other fields, high-school students with an interest in STEM subjects, and professionals who want an insight into algorithmic solutions and the related mindset. While the authors assume only basic mathematical knowledge, they uphold the scientific rigor that is indispensable for transforming general ideas into executable algorithms. A supporting website contains examples and Python code for implementing the algorithms in the book.