Skip to article frontmatterSkip to article content

Chapter Notes

In 1968, Knuth published the first of three volumes with the general title The Art of Computer Programming Knuth, 1997. The first volume ushered in the modern study of computer algorithms with a focus on the analysis of running time. The full series remains an engaging and worthwhile reference for many of the topics presented here. According to Knuth, the word “algorithm” is derived from the name “al-Khowârizmî,” a ninth-century Persian mathematician.

Aho, Hopcroft, and Ullman Aho et al., 1983 advocated the asymptotic analysis of algorithms — using notations that Chapter 3 introduces, including Θ\Theta-notation — as a means of comparing relative performance. They also popularized the use of recurrence relations to describe the running times of recursive algorithms.

Knuth Knuth, 1997 provides an encyclopedic treatment of many sorting algorithms. His comparison of sorting algorithms (page 381) includes exact step-counting analyses, like the one we performed here for insertion sort. Knuth’s discussion of insertion sort encompasses several variations of the algorithm. The most important of these is Shell’s sort, introduced by D. L. Shell, which uses insertion sort on periodic subarrays of the input to produce a faster sorting algorithm.

Merge sort is also described by Knuth. He mentions that a mechanical collator capable of merging two decks of punched cards in a single pass was invented in 1938. J. von Neumann, one of the pioneers of computer science, apparently wrote a program for merge sort on the EDVAC computer in 1945.

The early history of proving programs correct is described by Gries Gries, 1981, who credits P. Naur with the first article in this field. Gries attributes loop invariants to R. W. Floyd. The textbook by Mitchell Mitchell, 1996 is a good reference on how to prove programs correct.

References
  1. Knuth, D. E. (1997). The Art of Computer Programming: Fundamental Algorithms, Volume 1. Addison-Wesley Professional.
  2. Aho, A. V., Hopcroft, J. E., & Ullman, J. D. (1983). Data Structures and Algorithms. Addison-Wesley.
  3. Gries, D. (1981). The Science of Programming. Springer New York.
  4. Mitchell, J. C. (1996). Foundations for Programming Languages. MIT Press.