Boca Raton: Chapman and Hall/CRC, 2023. — 820 p.
A best-seller in its French edition, the construction of this book is original and its success in the French market demonstrates its appeal. It is based on three principles:
1. An organization of the chapters by families of algorithms: exhaustive search, divide and conquer, etc. On the contrary, there is no chapter only devoted to a systematic exposure of, say, algorithms on strings. Some of these will be found in different chapters.
2. For each family of algorithms, an introduction is given to the mathematical principles and the issues of a rigorous design, with one or two pedagogical examples.
3. For the most part, the book details 150 problems, spanning seven families of algorithms. For each problem, a precise and progressive statement is given.
More importantly, a complete solution is detailed, concerning the design principles that have been presented; often, some classical errors are pointed at. Roughly speaking, two-thirds of the book are devoted to the detailed rational construction of the solutions.
Mathematics and computer science: some valuable notions.
Reasoning and proving.
Propositional and predicate calculus.
Proof by contradiction.
Proof by induction with one index.
Proof by simple induction.
Proof by partial induction.
Proof by strong induction.
Partition induction.
Foundation of the proof by induction.
Proof by induction with several indexes.
Recurrence relations.
Generalities, examples, and closed forms.
Establishing and computing a recurrence relation.
Principles.
Some examples.
Designing the algorithm associated with a recurrence.
Recurrence, induction, recursion, etc.
Sets.
Basic notations.
Definition of sets.
Operations on sets.
Special sets.
Relations, functions, and arrays.
Relations.
Functions.
Arrays.
Bags.
Cartesian product and inductive structures.
Strings and sequences.
Graphs.
Directed graphs.
Undirected graphs.
Weighted graphs.
Trees.
Priority queues.
Definition.
Implementations.
FIFO and LIFO queues.
Solutions.
The complexity of an algorithm.
Reminders.
Algorithm.
Algorithmics, the complexity of an algorithm.
Minimum and maximum complexity of an algorithm.
Orders of growth.
Some examples of complexity.
About elementary operations.
Practical computing time.
Pseudo-polynomial problems.
Solutions.
Specification, invariants, and iteration.
Principle for the construction of loops by invariant.
An introductory example: is the Euclidian division.
Useful techniques.
Sequential composition.
Predicate strengthening and weakening.
We are strengthening by the introduction of programming variables.
Heuristics for the discovery of invariants.
The breakup of the postcondition.
The hypothesis of the work was carried out partly.
We are strengthening the invariant.
About bounded linear search.
An example.
Special case and related pattern.
Some key points to develop a loop.
Solutions.
Reduce and conquer, recursion.
A few reminders about recursion.
Recurrence relation and recursion.
“Reduce and conquer” and its complexity.
Presentation.
Example: the spiral pattern.
Example: Hanoi towers.
What should be reminded for “Reduce and conquer”?
Solutions.
Generate and test.
Fundamentals.
Principle.
Functions and related frames.
Total functions.
The case of partial functions.
Patterns for “Generate and test”.
Patterns derived from “AllSolutions”.
Patterns derived from “OptimalSolution”.
Patterns derived from “OneSolution”.
An example: is the optimal partition of an array.
The basic problem.
The initial problem is with a strengthened precondition and a strengthened postcondition.
The initial problem is with a strengthened precondition.
What should be remembered from “Generate and test”?
Exercises.
Solutions.
Branch and bound.
Branch and bound: the principle.
The separation phase.
The selection phase.
The evaluation phase.
The generic “Branch and bound” algorithm.
The priority queue.
Construction of the generic “Branch and bound” algorithm.
The generic “Branch and bound” algorithm itself.
An interesting special case for the functions f∗ and f.
An example: is the traveling salesman.
Initial choices.
The algorithm.
First case study: the zero heuristic function.
Second case study: uniform cost.
What should be remembered about the “Branch and bound” approach?
Solutions.
Greedy algorithms.
Presentation.
Proving that a greedy algorithm is exact or optimal.
An example: is task scheduling on a photocopier.
The “lead run” method.
Proof a posteriori: the transformation technique.
What to remember about greedy methods.
Solutions.
Divide and conquer.
Presentation and principle.
An example: is merge-sort.
The general pattern for “Divide and conquer”.
A typology of “Divide and conquer” algorithms.
The complexity of “Divide and conquer”.
Introduction to the master theorem.
Other types of recurrence equations.
About the size of the problem.
What to remember about the DaC approach.
Solutions.
Dynamic programming.
Overview.An example: the longest sub-sequence common to two sequences.
What should be remembered to apply dynamic programming.
Cutting and sharing: one-dimensional problems.
Cutting and sharing: two-dimensional problems.
Graphs and trees.
Sequences.
Definitions.
The problem.
Images.
Games.
Pseudo-polynomial problems.
Solutions.
List of problems.