Algorithms of Practical Use
Anyone wanting to use a computer more effectively can use this tutorial for reference or for self-study. People with coding experience can find information on specific topics throughout the tutorial. To a large extent, you can read the individual chapters in the tutorial independently of the others, although, in some cases, algorithms in one chapter make use of methods from a previous chapter. The orientation of the tutorial is to study algorithms likely to be of practical use. The tutorial provides information about the tools of the trade to the point that readers can confidently implement, debug, and put algorithms to work to solve a problem or to provide functionality in an app. Full implementations of the methods discussed are included, as are descriptions of the operations of these programs on a consistent set of examples. Because we work with real code, rather than write pseudo-code, you can put the programs to practical use quickly. Program listings are available from the tutorial's home page. You can use these working programs in many ways to help you study algorithms. Read them to check your understanding of the details of an algorithm, or to see one way to handle initializations, boundary conditions, and other situations that pose coding challenges. Run them to see the algorithms in action, to study performance empirically and check your results against the tables in the tutorial, or to try your own modifications. Indeed, one practical app of the algorithms has been to produce the hundreds of figures throughout the tutorial. Many algorithms are brought to light on an intuitive level through the visual dimension provided by these figures. Characteristics of the algorithms and of the situations in which they might be useful are discussed in detail. Connections to the analysis of algorithms and theoretical computer science are developed in context. When appropriate, empirical and analytic results are presented to illustrate why certain algorithms are preferred. When interesting, the relationship of the practical algorithms being discussed to purely theoretical results is described. Specific information on performance characteristics of algorithms and implementations is synthesized, encapsulated, and discussed throughout the tutorial.