Skip to main content
Shopping cart: items Cart

Distributed for Center for the Study of Language and Information

Selected Papers on Design of Algorithms

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.

Table of Contents


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


Be the first to know

Get the latest updates on new releases, special offers, and media highlights when you subscribe to our email lists!

Sign up here for updates about the Press