Abstract
Designing an algorithm is a profoundly creative human endeavor. Indeed, to design an algorithm one has to conceive a solution by drawing on a deep understanding of the problem at hand, on one’s knowledge of techniques adopted for the construction of other algorithms and, above all, on a fair sprinkling of one’s personal inventiveness. As a consequence there can be no fully automated method for generating the solution to a given problem. So, in this chapter we want to indicate the line to be followed in order to arrive at an algorithm design of optimized form. Integral to this we explain why it is essential to find the best way to abstract, represent and organize the information available about the specific problem to be tackled.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 1.
The graph could, instead, be read symmetrically from the male point of view, that is, Alexis can choose between Julia and Alexandra, Daniel between Clair and Alexandra, etc.
- 2.
Today named Kaliningrad.
- 3.
To be precise, the graph in Fig. 2.6b is in fact a multigraph, since two of its nodes can be connected by more than one edge.
- 4.
The degree of a vertex in a non-orientated graph is defined as the number of edges incident on that vertex.
- 5.
A graph is said to be planar if it can be drawn in the plane without its edges intersecting.
- 6.
In the graph shown in Fig. 2.9a there are two sources: node A and node C.
- 7.
Decision tree is the name given to a tree in which each node represents a set of possible choices.
- 8.
This is a typical allocation problem similar to the problems of how to load crates of different weights into a container, how to cut plates of different shape from a sheet, how to store files of different sizes on a disc, etc.
- 9.
The factorial of a number n is the product of all the whole numbers between 1 and n, inclusive. That is, n! = n × (n − 1) × (n − 2) × (n − 3) × … × 3 × 2 × 1.
References
Aho, A., Hopcroft, J., Ullman, J.: Data Structures and Algorithms. Addison-Wesley, Reading (1987)
Graham, R.L., Hell, P.: On the history of the minimum spanning tree problem. Ann. Hist. Comput. 7(1), 43–57 (1985)
Harel, D., Feldman, Y.: Algorithmics: The Spirit of Computing, 3rd edn. Addison-Wesley, Harlow (2004)
Horowitz, E., Sahni, S.: Fundamentals of Data Structures. Computer Science Press, Woodland Hills (1976)
Kleinberg, J., Tardos, É.: Algorithm Design. Addison-Wesley, Boston (2005)
Knuth, D.: The Art of Computer Programming. Volume 1: Fundamental Algorithms. Addison-Wesley Professional, Reading (1997)
Levitin, A.: Introduction to the Design and Analysis of Algorithms, 3rd edn. Addison-Wesley, Boston (2012)
Pólya, G.: Mathematics and Plausible Reasoning. Volume 1: Induction and Analogy in Mathematics. Princeton University Press, Princeton (1990)
Simeone, B.: Nuggets in matching theory. AIRONews XI(2), 1–11 (2006)
van Lint, J.H.: Introduction to Coding Theory. Springer, New York (1998)
Wirth, N.: Algorithms + Data Structures = Programs. Prentice Hall, Englewood Cliffs (1976)
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2013 Springer-Verlag Berlin Heidelberg
About this chapter
Cite this chapter
Petreschi, R. (2013). How to Design an Algorithm. In: Ausiello, G., Petreschi, R. (eds) The Power of Algorithms. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-39652-6_2
Download citation
DOI: https://doi.org/10.1007/978-3-642-39652-6_2
Published:
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-39651-9
Online ISBN: 978-3-642-39652-6
eBook Packages: Computer ScienceComputer Science (R0)