# Selected Papers on Design of Algorithms

### Distributed for Center for the Study of Language and Information

Donald Knuth’s influence in computer science ranges from the invention of methods for translating and defining programming languages to the creation of the TEX and METAFONT systems for desktop publishing. His award-winning textbooks have become classics that are often given credit for shaping the field; his scientific papers are widely referenced and stand as milestones of development over a wide variety of topics. The present volume, which is the seventh in a series of his collected papers, is devoted to his work on the design of new algorithms. It covers methods for numerous discrete problems such as sorting, searching, data compression, optimization, theorem-proving, and cryptography, as well as methods for controlling errors in numerical computations and for Brownian motion.

Nearly thirty of Knuth’s classic papers on the subject are collected in this book, brought up to date with extensive revisions and notes on subsequent developments. Many of these algorithms have seen wide use—for example, Knuth’s algorithm for optimum search trees, the Faller-Gallagher-Knuth algorithm for adaptive Huffman coding, the Knuth-Morris-Pratt algorithm for pattern matching, the Dijkstra-Knuth algorithm for optimum expressions, and the Knuth-Bendix algorithm for deducing the consequences of axioms. Others are pedagogically important, helping students to learn how to design new algorithms for new tasks. One or two are significant historically, as they show how things were done in computing’s early days. All are found here, together with more than forty newly created illustrations.

Preface

Acknowledgments

1 Robert W Floyd, in Memoriam

2 The Bose–Nelson Sorting Problem

3 A One-Way, Stackless Quicksort Algorithm

4 Optimum Binary Search Trees

5 Dynamic Huffman Coding

6 Inhomogeneous Sorting

7 Lexicographic Permutations with Restrictions

8 Nested Satisfiability

9 Fast Pattern Matching in Strings

10 Addition Machines

11 A Simple Program Whose Proof Isn't

12 Verification of Link-Level Protocols

13 A Problem in Concurrent Programming Control

14 Optimal Prepaging and Font Caching

15 A Generalization of Dijkstra's Algorithm

16 Two-Way Rounding

17 Matroid Partitioning

18 Irredundant Intervals

19 Simple World Problems in Universal Algebras

20 Efficient Representation of Perm Groups

21 An Algorithm for Brownian Zeros

22 Semi-Optimal Bases for Linear Dependencies

23 Evading the Drift in Floating-Point Addition

24 Deciphering a Linear Congruential Encryption

25 Computation of Tangent, Euler, and Bernoulli Numbers

26 Euler's Constant to 1271 Places

27 Evaluation of Polynomials by Computer

28 Minimizing Drum Latency Time

Index

You may purchase this title at these fine bookstores. Outside the USA, see our international sales information.