The Art of Computer Programming

Short description: Books about algorithms by Donald Knuth

Not to be confused with The Art of Unix Programming.

The Art of Computer Programming

The Art of Computer Programming, Volume 1: Fundamental Algorithms

Author| Donald Knuth
Country| United States
Language| English
Genre| Non-fiction
Monograph
Publisher| Addison-Wesley

Publication date

| 1968 – present
Media type| Print (Hardcover)
ISBN| 0-201-03801-3

Dewey Decimal

| 519
LC Class| QA76.75

The Art of Computer Programming (TAOCP) is a comprehensive multi-volume monograph (Volumes 1-7) written by the computer scientist Donald Knuth presenting programming algorithms and their analysis. As of 2025[update] it consists of published volumes 1, 2, 3, 4A, and 4B, with more expected to be released in the future. The Volumes 1–5 are intended to represent the central core of computer programming for sequential machines; the subjects of Volumes 6 and 7 are important but more specialized.[1]

When Knuth began the project in 1962, he originally conceived of it as a single book with twelve chapters. The first three volumes of what was then expected to be a seven-volume set were published in 1968, 1969, and 1973. Work began in earnest on Volume 4 in 1973, but was suspended in 1977 for work on typesetting prompted by the second edition of Volume 2. Writing of the final copy of Volume 4A began in longhand in 2001, and the first online pre-fascicle, 2A, appeared later in 2001.[2] The first published installment of Volume 4 appeared in paperback as Fascicle 2 in 2005. The hardback Volume 4A, combining Volume 4, Fascicles 0–4, was published in 2011. Volume 4, Fascicle 6 ("Satisfiability") was released in December 2015; Volume 4, Fascicle 5 ("Mathematical Preliminaries Redux; Backtracking; Dancing Links") was released in November 2019.

Volume 4B consists of material evolved from Fascicles 5 and 6.[3] The manuscript was sent to the publisher on August 1, 2022, and the volume was published in September 2022.[4] Fascicle 7 ("Constraint Satisfaction"), planned for Volume 4C, was the subject of Knuth's talk on August 3, 2022[5] and was published on February 5, 2025.[6]

## Contents

* 1 History
* 2 Bounty for finding errors
* 3 Assembly language in the book
* 4 Critical response
* 5 Volumes
* 5.1 Completed
* 5.2 Planned
* 6 English editions
* 6.1 Current editions
* 6.2 Previous editions
* 6.2.1 Complete volumes
* 6.2.2 Fascicles
* 6.2.3 Pre-fascicles
* 7 See also
* 8 References
* 9 External links

## History

Donald Knuth in 2005

After winning a Westinghouse Talent Search scholarship, Knuth enrolled at the Case Institute of Technology (now Case Western Reserve University), where his performance was so outstanding that the faculty voted to award him a master of science upon his completion of the bachelor's degree. During his summer vacations, Knuth was hired by the Burroughs Corporation to write compilers, earning more in his summer months than full professors did for an entire year.[7] Such exploits made Knuth a topic of discussion among the mathematics department, which included Richard S. Varga.

In January 1962, when he was a graduate student in the mathematics department at Caltech, Knuth was approached by Addison-Wesley to write a book about compiler design, and he proposed a larger scope. He came up with a list of twelve chapter titles the same day. In the summer of 1962 he worked on a FORTRAN compiler for UNIVAC, considering that he had "sold my soul to the devil" to develop a FORTRAN compiler[8]: 15 after ALGOL developments with Burroughs. He remained as a consultant to Burroughs over the period 1960 to 1968 while writing Volume 1 "Fundamental Algorithms".

During this time, he also developed a mathematical analysis of linear probing, which convinced him to present the material with a quantitative approach. After receiving his Ph.D. in June 1963, he began working on his manuscript, of which he finished his first draft in June 1965, at 3000 hand-written pages.[9] He had assumed that about five hand-written pages would translate into one printed page, but his publisher said instead that about ​1 1⁄2 hand-written pages translated to one printed page. This meant he had approximately 2000 printed pages of material, which closely matches the size of the first three published volumes.

The first volume of "The Art of Computer Programming", "Fundamental Algorithms", took five years to complete between 1963 and 1968 while working at both Caltech and Burroughs.

Knuth's dedication in Volume 1 reads:

> This series of books is affectionately dedicated
> to the Type 650 computer once installed at
> Case Institute of Technology,
> in remembrance of many pleasant evenings.[lower-alpha 1]

In the preface, he thanks first his wife Jill, then Burroughs for the use of B220 and B5500 computers in testing most of the programs, and Caltech, the National Science Foundation, and the Office of Naval Research.[10]: xii

Section 2.5 of "Fundamental Algorithms" is on Dynamic Storage Allocation. Parts of this are used in the Burroughs approach to memory management. Knuth claims credit for: “the “boundary-tag” method, introduced in Section 2.5, was designed by the author in 1962 for use in a control program for the B5000 computer.”[10]: 460

Knuth received support from Richard S. Varga, who was the scientific adviser to the publisher. Varga was visiting Olga Taussky-Todd and John Todd at Caltech. With Varga's enthusiastic endorsement, the publisher accepted Knuth's expanded plans. In its expanded version, the book would be published in seven volumes, each with just one or two chapters.[11] Due to the growth in Chapter 7, which was fewer than 100 pages of the 1965 manuscript, per Vol. 4A p. vi, the plan for Volume 4 has since expanded to include Volumes 4A, 4B, 4C, 4D, and possibly more.

In 1976, Knuth prepared a second edition of Volume 2, requiring it to be typeset again, but the style of type used in the first edition (called hot type) was no longer readily available. In 1977, he decided to spend some time creating something more suitable. Eight years later, he returned with TEX, which is currently used for all volumes.

Another characteristic of the volumes is the variation in the difficulty of the exercises including a numerical rating varying from 0 to 50, where 0 is trivial, and 50 is an open question in contemporary research.

## Bounty for finding errors

The offer of a so-called Knuth reward check worth "one hexadecimal dollar" (100HEX base 16 cents, in decimal, is $2.56) for any errors found, and the correction of these errors in subsequent printings, has contributed to the highly polished and still-authoritative nature of the work, long after its first publication.

## Assembly language in the book

All examples in the books use a hypothetical language called "MIX assembly language" (MIXAL), which runs on "a mythical computer called MIX". Currently,[when?] the MIX computer is being replaced by the MMIX computer, which is a RISC version. The conversion from MIX to MMIX was a large ongoing project for which Knuth solicited volunteers for help. Software such as GNU MDK[12] exists to provide emulation of the MIX architecture. Knuth considers the use of assembly language necessary for the speed and memory usage of algorithms to be judged.

According to Knuth, MIX was much like any computer then in existence, but nicer.[13] The name 'MIX' is 1009 in Roman numerals and this is given by a formula involving series numbers of several computers of the time: (360 + 650 + 709 + U3 + SS80 + 1107 + 1604 + G2- + B220 + S2000 + 920 + 601 + H800 + PDP-4 + 11)/16 = 1009 or MIX. The name MMIX is 2009 in Roman numerals and Knuth claims MMIX is even nicer than MIX.

## Critical response

Knuth was awarded the 1974 Turing Award "for his major contributions to the analysis of algorithms […], and in particular for his contributions to the 'art of computer programming' through his well-known books in a continuous series by this title."[14] American Scientist has included this work among "100 or so Books that shaped a Century of Science", referring to the twentieth century.[15] Covers of the third edition of Volume 1 quote Bill Gates as saying, "If you think you're a really good programmer… read (Knuth's) Art of Computer Programming… You should definitely send me a résumé if you can read the whole thing."[16] The New York Times referred to it as "the profession's defining treatise".[17]

## Volumes

### Completed

* Volume 1 – Fundamental algorithms
* Chapter 1 – Basic concepts[18]
* Chapter 2 – Information structures
* Volume 2 – Seminumerical algorithms
* Chapter 3 – Random numbers
* Chapter 4 – Arithmetic
* Volume 3 – Sorting and searching
* Chapter 5 – Sorting
* Chapter 6 – Searching
* Volume 4A – Combinatorial algorithms
* Chapter 7 – Combinatorial searching (part 1)
* Volume 4B – Combinatorial algorithms
* Chapter 7 – Combinatorial searching (part 2)

### Planned

* Volume 4C, 4D, ... Combinatorial algorithms (chapters 7 & 8 released in several subvolumes)[19]
* Chapter 7 – Combinatorial searching (continued)[20]
* Chapter 8 – Recursion
* Volume 5 – Syntactic algorithms
* Chapter 9 – Lexical scanning (also includes string search and data compression)
* Chapter 10 – Parsing techniques
* Volume 6 – The Theory of context-free languages[21]
* Chapter 11 – Mathematical linguistics[22]
* Volume 7 – Compiler techniques
* Chapter 12 – Programming language translation[22]

## English editions

### Current editions

These are the current editions in order by volume number:

* The Art of Computer Programming, Volumes 1-4B Boxed Set. (Reading, Massachusetts: Addison-Wesley, 2023), 3904pp. ISBN 978-0-13-793510-9, 0-13-793510-2
* Volume 1: Fundamental Algorithms. Third Edition (Reading, Massachusetts: Addison-Wesley, 1997), xx+650pp. ISBN 978-0-201-89683-1, 0-201-89683-4. Errata: [1] (from 2011-01-08), [2] (from 2022, 49th printing). Addenda: [3] (2011).
* Volume 2: Seminumerical Algorithms. Third Edition (Reading, Massachusetts: Addison-Wesley, 1997), xiv+762pp. ISBN 978-0-201-89684-8, 0-201-89684-2. Errata: [4] (from 2011-01-08), [5] (from 2022, 45th printing). Addenda: [6] (2011).
* Volume 3: Sorting and Searching. Second Edition (Reading, Massachusetts: Addison-Wesley, 1998), xiv+780pp.+foldout. ISBN 978-0-201-89685-5, 0-201-89685-0. Errata: [7] (from 2011-01-08), [8] (from 2022, 45th printing). Addenda: [9] (2011).
* Volume 4A: Combinatorial Algorithms, Part 1. First Edition (Upper Saddle River, New Jersey: Addison-Wesley, 2011, 26th printing), xv+883pp. ISBN 978-0-201-03804-0, 0-201-03804-8. Errata: [10] (from 2011), [11] (from 2022, 20th printing).
* Volume 4B: Combinatorial Algorithms, Part 2. First Edition (Upper Saddle River, New Jersey: Addison-Wesley, 2023, 3rd printing), xviii+714pp. ISBN 978-0-201-03806-4, 0-201-03806-4. Errata: [12] (from 2023, 1st printing).
* Volume 1, Fascicle 1: MMIX – A RISC Computer for the New Millennium. (Addison-Wesley, 2005-02-14), 144pp. ISBN 0-201-85392-2. Errata: [13] (from 2005, 1st printing) (will be in the fourth edition of volume 1)
* The MMIX Supplement by Martin Ruckert. (Addison-Wesley), 193pp. ISBN 0-13-399231-4. A conversion of the MIX problems/programs in volumes 1, 2 & 3 to MMIX.
* Volume 4, Fascicle 7: Constraint Satisfaction. (Addison-Wesley, 2025-02-05), xiv+281pp. ISBN 978-0-13-532824-8. Errata: [14] (2025-12-28).

### Previous editions

#### Complete volumes

These volumes were superseded by newer editions and are in order by date.

* Volume 1: Fundamental Algorithms. First edition, 1968, xxi+634pp, ISBN 0-201-03801-3.[23]
* Volume 2: Seminumerical Algorithms. First edition, 1969, xi+624pp, ISBN 0-201-03802-1.[23]
* Volume 3: Sorting and Searching. First edition, 1973, xi+723pp+foldout, ISBN 0-201-03803-X. Errata: [15].
* Volume 1: Fundamental Algorithms. Second edition, 1973, xxi+634pp, ISBN 0-201-03809-9. Errata: [16].
* Volume 2: Seminumerical Algorithms. Second edition, 1981, xiii+ 688pp, ISBN 0-201-03822-6. Errata: [17].
* The Art of Computer Programming, Volumes 1-3 Boxed Set. Second Edition (Reading, Massachusetts: Addison-Wesley, 1998), pp. ISBN 978-0-201-48541-7, 0-201-48541-9
* The Art of Computer Programming, Volumes 1-4A Boxed Set. Third Edition (Reading, Massachusetts: Addison-Wesley, 2011), 3168pp. ISBN 978-0-321-75104-1, 0-321-75104-3

#### Fascicles

Volume 4, Fascicles 0–4 were revised and published as Volume 4A.

* Volume 4, Fascicle 0: Introduction to Combinatorial Algorithms and Boolean Functions. (Addison-Wesley Professional, 2008-04-28) vi+240pp, ISBN 0-321-53496-4. Errata: [18] (2011-01-01).
* Volume 4, Fascicle 1: Bitwise Tricks & Techniques; Binary Decision Diagrams. (Addison-Wesley Professional, 2009-03-27) viii+260pp, ISBN 0-321-58050-8. Errata: [19] (2011-01-01).
* Volume 4, Fascicle 2: Generating All Tuples and Permutations. (Addison-Wesley, 2005-02-14) v+127pp, ISBN 0-201-85393-0. Errata: [20] (2011-01-01).
* Volume 4, Fascicle 3: Generating All Combinations and Partitions. (Addison-Wesley, 2005-07-26) vi+150pp, ISBN 0-201-85394-9. Errata: [21] (2011-01-01).
* Volume 4, Fascicle 4: Generating All Trees; History of Combinatorial Generation. (Addison-Wesley, 2006-02-06) vi+120pp, ISBN 0-321-33570-8. Errata: [22] (2011-01-01).

Volume 4, Fascicles 5–6 were revised and published as Volume 4B.

* Volume 4, Fascicle 5: Mathematical Preliminaries Redux; Backtracking; Dancing Links. (Addison-Wesley, 2019-11-22) xiii+382pp, ISBN 978-0-13-467179-6. Errata: [23] (2020-03-27)
* Volume 4, Fascicle 6: Satisfiability. (Addison-Wesley, 2015-12-08) xiii+310pp, ISBN 978-0-13-439760-3. Errata: [24] (2020-03-26)

#### Pre-fascicles

Pre-fascicles contain draft of evolving material for future Fascicles. They are put online primarily so that experts in the field can check the contents before distributing them to a wider audience.[24]

Volume 1

* Pre-fascicle 1: MMIX was revised and published as Volume 1, fascicle 1.

Volume 4

* Pre-fascicles 0A: Introduction to Combinatorial Searching, 0B: Boolean Basics, and 0C: Boolean Evaluation were revised and published as Volume 4, fascicle 0.
* Pre-fascicles 1A: Bitwise Tricks and Techniques and 1B: Binary Decision Diagrams were revised and published as Volume 4, fascicle 1.
* Pre-fascicles 2A: Generating All n-Tuples and 2B: Generating All Permutations were revised and published as Volume 4, fascicle 2.
* Pre-fascicles 3A: Generating All Combinations and 3B: Generating All Partitions were revised and published as Volume 4, fascicle 3.
* Pre-fascicles 4A: Generating All Trees and 4B: History of Combinatorial Generation were revised and published as Volume 4, fascicle 4.
* Pre-fascicles 5A: Preliminaries Redux, 5B: Introduction to Backtracking, and 5C: Dancing Links were revised and published as Volume 4, fascicle 5.
* Pre-fascicle 6A: Satisfiability was revised and published as Volume 4, fascicle 6.
* Pre-fascicle 7A: Constraint Satisfaction was revised and published as Volume 4, fascicle 7.

The remaining pre-fascicles contain draft material that is set to appear in future fascicles and volumes.

* Volume 4, Pre-fascicle 8A: Hamiltonian Paths and Cycles (PDF Version)
* Volume 4, Pre-fascicle 8B: Cliques
* Volume 4, Pre-fascicle 9B: A Potpourri of Puzzles
* Volume 4, Pre-fascicle 9C: Estimating Backtrack Costs
* Volume 4, Pre-fascicle 12A: Components and Traversal (PDF Version)
* Volume 4, Pre-fascicle 14A: Bipartite Matching
* Volume 4, Pre-fascicle 16A: Introduction to Recursion

## See also

* Introduction to Algorithms

## References

Notes

1. ↑ The dedication was worded slightly differently in the first edition.

Citations

1. ↑ "Knuth's note about his books". https://www-cs-faculty.stanford.edu/~knuth/taocp.html#future.
2. ↑ "note for box 3, folder 1". https://oac.cdlib.org/findaid/ark:/13030/kt2k4035s1/entire_text.
3. ↑ Pearson InformIT webpage book Content tab. Addison-Wesley Professional.. September 28, 2022. ISBN 9780201038064. https://www.informit.com/store/art-of-computer-programming-volume-4b-combinatorial-9780201038064. Retrieved 2022-07-19.
4. ↑ Pearson InformIT webpage. Addison-Wesley Professional.. September 28, 2022. ISBN 9780201038064. https://www.informit.com/store/art-of-computer-programming-volume-4b-combinatorial-9780201038064. Retrieved 2022-07-19.
5. ↑ "CP 2022 All Questions Answered, July 31–August 5, 2022, Haifa, Israel". https://cp2022.a4cp.org/invited.html.
6. ↑ Pearson InformIT webpage. Addison-Wesley Professional.. February 5, 2025. ISBN 9780135328248. https://www.informit.com/store/art-of-computer-programming-volume-4-fascicle-7-constraint-9780135328248. Retrieved 2025-02-18.
7. ↑ "An Interview with Donald E. Knuth". 2001-11-08. https://conservancy.umn.edu/handle/11299/107413.
8. ↑ Feigenbaum, Edward (2007). "Oral History of Donald Knuth". https://archive.computerhistory.org/resources/text/Oral_History/Knuth_Don_1/Knuth_Don.oral_history.2007.102658053_all.pdf.
9. ↑ "This Week's Citation Classic". Current Contents. 1993-08-23. p. 8. https://garfield.library.upenn.edu/classics1993/A1993LQ46300001.pdf.
10. ↑ 10.0 10.1 Knuth, Donald Ervin (2019-08-03). "The Art of Computer Programming (TAOCP) 2nd Edition, 1973". https://cs.stanford.edu/~knuth/taocp.html.
11. ↑ "Donald Knuth". Mathematical People: Profiles and Interviews (2 ed.). A. K. Peters. 2008. ISBN 978-1-56881-340-0.
12. ↑ "GNU MDK - GNU Project - Free Software Foundation". https://www.gnu.org/software/mdk/mdk.html.
13. ↑ Knuth, Donald (1997). Art of Computer Programming, Volume 1, Fundamental Algorithms (Third ed.). Addison Wesley Professional. p. 124. ISBN 0201896834.
14. ↑ "Donald E. Knuth – A. M. Turing Award Winner". https://amturing.acm.org/award_winners/knuth_1013846.cfm.
15. ↑ "100 or so Books that shaped a Century of Science". American Scientist (Sigma Xi, The Scientific Research Society) 87 (6). November–December 1999. https://www.americanscientist.org/article/100-or-so-books-that-shaped-a-century-of-science. Retrieved 2024-11-26.
16. ↑ "Bill Gates once said 'definitely send me a résumé' if you finish this fiendishly difficult book". https://www.businessinsider.com/bill-gates-loves-donald-knuth-the-art-of-computer-programming-2016-4.
17. ↑ "Frances E. Holberton, 84, Early Computer Programmer". The New York Times. 2001-12-17. https://www.nytimes.com/2001/12/17/business/frances-e-holberton-84-early-computer-programmer.html.
18. ↑ "Knuth's future editions Volumes 1-3". https://www-cs-faculty.stanford.edu/~knuth/taocp.html#future.
19. ↑ D'Agostino, Susan (2020-04-16). "The Computer Scientist Who Can't Stop Telling Stories". https://www.quantamagazine.org/computer-scientist-donald-knuth-cant-stop-telling-stories-20200416. ""Now 82, he’s hard at work on part B of volume 4, and he anticipates that the book will have at least parts A through F.""
20. ↑ Knuth, Donald (2025). Art of Computer Programming, Volume 4, Fascicle 7, The: Constraint Satisfaction. Addison Wesley Professional. ISBN 9780135328248.
21. ↑ "TAOCP – Future plans". https://cs.stanford.edu/~knuth/taocp.html#future.
22. ↑ 22.0 22.1 "TAOCP – Brochure". https://cs.stanford.edu/~knuth/brochure.pdf.
23. ↑ 23.0 23.1 "Review: The Art of Computer Programming, Volume 1. Fundamental Algorithms and Volume 2. Seminumerical Algorithms by Donald E. Knuth". Bulletin of the American Mathematical Society 79 (3): 501–509. 1973. doi:10.1090/s0002-9904-1973-13173-8. https://www.ams.org/journals/bull/1973-79-03/S0002-9904-1973-13173-8/S0002-9904-1973-13173-8.pdf. Retrieved 2018-06-20.
24. ↑ "Donald Knuth explaines the use of Pre-fascicles". https://www-cs-faculty.stanford.edu/~knuth/taocp.html.

Sources

* Portraits in Silicon. MIT Press. 1987. ISBN 0-262-19262-4. https://books.google.com/books?id=aWTtMyYmKhUC.
* Out of Their Minds: The Lives and Discoveries of 15 Great Computer Scientists. Copernicus. 1995. ISBN 0-387-97992-1. https://archive.org/details/isbn_9780387979922.

## External links

* Overview of topics (Knuth's personal homepage)
* Announcement of Volume 1 of 'The Art of Computer Programming'
* Oral history interview with Donald E. Knuth at Charles Babbage Institute, University of Minnesota, Minneapolis, 2001. Knuth discusses software patenting, structured programming, collaboration and his development of TeX. The oral history discusses the writing of The Art of Computer Programming.
* "Robert W Floyd, In Memoriam", by Donald E. Knuth, 2003 - (on the influence of Bob Floyd)
* TAoCP and its Influence of Computer Science (Softpanorama)

* v
* t
* e

Donald Knuth

Publications|

* The Art of Computer Programming
* "The Complexity of Songs"
* Computers and Typesetting
* Concrete Mathematics
* Surreal Numbers
* Things a Computer Scientist Rarely Talks About
* Selected papers series

Software|

* TeX
* Metafont
* MIXAL (MIX
* MMIX
* GNU MDK)

Fonts|

* AMS Euler
* Computer Modern
* Concrete Roman

Literate programming|

* WEB
* CWEB

Algorithms|

* Knuth's Algorithm X
* Knuth–Bendix completion algorithm
* Knuth–Morris–Pratt algorithm
* Knuth shuffle
* Robinson–Schensted–Knuth correspondence
* Trabb Pardo–Knuth algorithm
* Generalization of Dijkstra's algorithm
* Knuth's Simpath algorithm

Other|

* Dancing Links
* Knuth reward check
* Knuth Prize
* Man or boy test
* Quater-imaginary base
* -yllion
* Potrzebie system of weights and measures

0.00

(0 votes)

Original source: https://en.wikipedia.org/wiki/The Art of Computer Programming. Read more

|

Retrieved from "https://handwiki.org/wiki/index.php?title=The_Art_of_Computer_Programming&oldid=4296546"
*[LC Class]: Library of Congress Classification
*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template