The Art of Computer Programming

The Art of Computer Programming (sometimes known by its initials TAOCP) is a comprehensive monograph written by Donald Knuth that covers many kinds of programming algorithms and their analysis.[1]

This learning project is intended to provide a place for the discussion of Donald Knuth's the Art of Computer Programming. Discussions also take place on the mailing list at taocprg@lists.ibiblio.org

Please feel free to add notes to this page or (better) make a link to your notes/exercise/questions from the appropriate section of the book below.

Table of Contents edit

   Chapter 1 - Basic Concepts ..................................... 1
   1.1. Algorithms (exercises) .................................... 1
   1.2. Mathematical Preliminaries ............................... 10
       1.2.1. Mathematical Induction ............................. 11
       1.2.2. Numbers, Powers, and Logarithms External Solutions(exercises)......... 21
       1.2.3. Sums and Products .................................. 27
       1.2.4. Integer Functions and Elementary Number Theory ..... 39
       1.2.5. Permutations and Factorials ........................ 45
       1.2.6. Binomial Coefficients .............................. 52
       1.2.7. Harmonic Numbers ................................... 75
       1.2.8. Fibonacci Numbers .................................. 79
       1.2.9. Generating Functions ............................... 87
       1.2.10. Analysis of an Algorithm .......................... 96
      *1.2.11. Asymptotic Representations ....................... 107
          *1.2.11.1. The O-notation ............................. 107
          *1.2.11.2. Euler's summation formula .................. 111
          *1.2.11.3. Some asymptotic calculations ............... 116
   1.3. MIX ..................................................... 124
       1.3.1. Description of MIX ................................ 124
       1.3.2. The MIX Assembly Language ......................... 144
       1.3.3. Applications to Permutations ...................... 164
   1.4. Some Fundamental Programming Techniques ................. 186
       1.4.1. Subroutines ....................................... 186
       1.4.2. Goroutines ........................................ 193
       1.4.3. Interpretive Routines ............................. 200
           1.4.3.1. A MIX simulator ............................. 202
          *1.4.3.2. Trace routines .............................. 212
       1.4.4. Input and Output .................................. 215
       1.4.5. History and Bibliography .......................... 229
   Chapter 2 - Information Structures ........................... 232
   2.1. Introduction ............................................ 232
   2.2. Linear Lists ............................................ 238
       2.2.1. Stacks, Queues, and Deques ........................ 238
       2.2.2. Sequential Allocation ............................. 244
       2.2.3. Linked Allocation ................................. 254
       2.2.4. Circular Lists .................................... 273
       2.2.5. Doubly Linked Lists ............................... 280
       2.2.6. Arrays and Orthogonal Lists ....................... 298
   2.3. Trees ................................................... 308
       2.3.1. Traversing Binary Trees ........................... 318
       2.3.2. Binary Tree Representation of Trees ............... 334
       2.3.3. Other Representations of Trees .................... 348
       2.3.4. Basic Mathematical Properties of Trees ............ 362
           2.3.4.1. Free trees .................................. 363
           2.3.4.2. Oriented trees .............................. 372
          *2.3.4.3. The "infinity lemma" ........................ 382
          *2.3.4.4. Enumeration of trees ........................ 386
           2.3.4.5. Path length ................................. 399
          *2.3.4.6. History and bibliography .................... 406
       2.3.5. Lists and Garbage Collection ...................... 408
   2.4. Multilinked Structures .................................. 424
   2.5. Dynamic Storage Allocation .............................. 425
   History and Bibliography ..................................... 457
   Answers to Exercises ......................................... 466
   Appendix A--Tables of Numerical Quantities ................ 619
   1. Fundamental Constants (decimal) ........................... 619
   2. Fundamental Constants (octal) ............................. 620
   3. Harmonic Numbers, Bernoulli Numbers, Fibonacci Numbers .... 621
   Appendix B--Index to Notations ............................... 623
   Index and Glossary ........................................... 628

Related Helpful Material edit

Greek letters

  1. Wikipedia: The Art of Computer Programming