Abstract
Over the last years the term algorithm engineering has become wide spread synonym for experimental evaluation in the context of algorithm development. Yet it implies even more. We discuss the major weaknesses of traditional “pen and paper” algorithmics and the ever-growing gap between theory and practice in the context of modern computer hardware and real-world problem instances. We present the key ideas and concepts of the central algorithm engineering cycle that is based on a full feedback loop: It starts with the design of the algorithm, followed by the analysis, implementation, and experimental evaluation. The results of the latter can then be reused for modifications to the algorithmic design, stronger or input-specific theoretic performance guarantees, etc. We describe the individual steps of the cycle, explaining the rationale behind them and giving examples of how to conduct these steps thoughtfully. Thereby we give an introduction to current algorithmic key issues like I/O-efficient or parallel algorithms, succinct data structures, hardware-aware implementations, and others. We conclude with two especially insightful success stories—shortest path problems and text search—where the application of algorithm engineering techniques led to tremendous performance improvements compared with previous state-of-the-art approaches.
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsPreview
Unable to display preview. Download preview PDF.
References
Abouelhoda MI, Kurtz S, Ohlebusch E (2002) The enhanced suffix array and its applications to genome analysis. In: Proceedings of the Second InternationalWorkshop on Algorithms in Bioinformatics (WABI 02), Springer, pp 449–463
Abouelhoda MI, Kurtz S, Ohlebusch E (2004) Replacing suffix trees with enhanced suffix arrays. Journal of Discrete Algorithms 2(1):53–86
Aggarwal A, Vitter JS (1988) The input/output complexity of sorting and related problems. Communications of the ACM 31(9):1116–1127
Aho A, Johnson D, Karp RM, Kosaraju R, McGeoch C, Papadimitriou C (1997) Emerging opportunities for theoretical computer science. SIGACT News 28(3)
Arge L, Ferragina P, Grossi R, Vitter JS (1997) On sorting strings in external memory (extended abstract). In: Proceedings of the 29th Annual ACM Symposium on Theory of Computing (STOC 97), ACM, pp 540–548
Auslander L, Parter SV (1961) On imbedding graphs in the plane. Journal of Mathematics and Mechanics 10(3):517–523
Birge JR, Louveaux F (2000) Introduction to Stochastic Programming. Springer
Boyer JM, Myrvold WJ (2004) On the cutting edge: Simplified O(n) planarity by edge addition. Journal of Graph Algorithms and Applications 8(3):241–273
Boyer JM, Cortese PF, Patrignani M, Battista GD (2004) Stop minding your P’s and Q’s: Implementing a fast and simple DFS-based planarity testing and embedding algorithm. In: Proceedings of the 11th International Symposium on Graph Drawing (GD 03), Springer, LNCS, vol 2912, pp 25–36
Chimani M, Kandyba M, Ljubić I, Mutzel P (2009) Obtaining optimal k-cardinality trees fast. Journal of Experimental Algorithmics (Accepted). A preliminary version appeared in: Proceedings of the 9th Workshop on Algorithm Engineering and Algorithms (ALENEX 08), pages 27–36, SIAM, 2008.
Crauser A, Ferragina P (2002) A theoretical and experimental study on the construction of suffix arrays in external memory. Algorithmica 32(1):1–35
de Fraysseix H, Ossona de Mendez P (2003) On cotree-critical and DFS cotreecritical graphs. Journal of Graph Algorithms and Applications 7(4):411–427
Dementiev R (2006) Algorithm engineering for large data sets. PhD thesis, Universität des Saarlandes
Dementiev R, Kärkkäinen J, Mehnert J, Sanders P (2008a) Better external memory suffix array construction. Journal of Experimental Algorithmics 12:1–24
Dementiev R, Kettner L, Sanders P (2008b) Stxxl: standard template library for xxl data sets. Software: Practice & Experience 38(6):589–637
Demeter J, Beauheim C, Gollub J, Hernandez-Boussard T, Jin H, Maier D, Matese JC, Nitzberg M, Wymore F, Zachariah ZK, Brown PO, Sherlock G, Ball CA (2007) The Stanford microarray database: implementation of new analysis tools and open source release of software. Nucleic Acids Res 35(Database issue)
Dijkstra EW (1959) A note on two problems in connexion with graphs. Numerische Mathematik 1:269–271
Farach-Colton M, Ferragina P, Muthukrishnan S (2000) On the sorting-complexity of suffix tree construction. Journal of the ACM 47(6):987–1011
Ferragina P, Manzini G (2002) On compressing and indexing data. Tech. Rep. TR-02-01, University of Pisa
Ferragina P, Manzini G, Mäkinen V, Navarro G (2007) Compressed representations of sequences and full-text indexes. ACM Trans Algorithms 3(2):20
Finocchi I, Italiano GF (2004) Sorting and searching in the presence of memory faults (without redundancy). In: Proceedings of the 36th ACM Symposium on Theory of Computing (STOC 04), pp 101–110
Frigo M, Leiserson CE, Prokop H, Ramachandran S (1999) Cache-oblivious algorithms. In: Proceedings of the 40th Annual Symposium on Foundations of Computer Science (FOCS 99), IEEE Computer Society, p 285
Futamura N, Aluru S, Kurtz S (2001) Parallel suffix sorting. In: Proceedings of the 9th International Conference on Advanced Computing and Communications, Tata McGraw-Hill, pp 76–81
Gagarin A, Myrvold W, Chambers J (2005) Forbidden minors and subdivisions for toroidal graphs with no K3;3’s. Electronic Notes in Discrete Mathematics 22:151–156
Geary RF, Raman R, Raman V (2004) Succinct ordinal trees with level-ancestor queries. In: Proceedings of the 15th Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 04), SIAM, pp 1–10
Goldberg A, Harrelson C (2005) Computing the shortest path: A* search meets graph theory. In: Proceedings of the 16th Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 05), SIAM
Goldberg AV, Kaplan H, Werneck R (2005) Reach for A*: Efficient point-to-point shortest path algorithms. Tech. Rep. MSR-TR-2005-132, Microsoft Research (MSR)
Goldstein AJ (1963) An efficient and constructive algorithm for testing whether a graph can be embedded in a plane. In: Proceedings of the Graph and Combinatorics Conference ’63
Golynski A, Grossi R, Gupta A, Raman R, Rao SS (2007) On the size of succinct indices. In: Proceedings of the 15th Annual European Symposium on Algorithms (ESA 07), Springer, LNCS, vol 4698, pp 371–382
Grossi R, Vitter JS (2005) Compressed suffix arrays and suffix trees with applications to text indexing and string matching. SIAM Journal on Computing 35(2):378–407
Gupta A (2007) Succinct data structures. PhD thesis, Duke University, Durham, NC, USA
Gutman R (2004) Reach-based routing: A new approach to shortest path algorithms optimized for road networks. In: Proceedings of the 6th Workshop on Algorithm Engineering and Experiments (ALENEX 04), SIAM, pp 100–111
Gutwenger C, Mutzel P (2001) A linear time implementation of SPQR-trees. In: Proceedings of the 8th International Symposium on Graph Drawing (GD 00), Springer, LNCS, vol 1984, pp 77–90
Henzinger M (2004) The past, present and future of web search engines (invited talk). In: 31st International Colloquium Automata, Languages and Programming, (ICALP 04), LNCS, vol 3142, p 3
Hopcroft JE, Tarjan RE (1973) Dividing a graph into triconnected components. SIAM Journal on Computing 2(3):135–158
Hopcroft JE, Tarjan RE (1974) Efficient planarity testing. Journal of the ACM 21(4):549–568
Iliopoulos CS, Rytter W (2004) On parallel transformations of suffix arrays into suffix trees. In: Proceedings of the 15th AustralasianWorkshop on Combinatorial Algorithms (AWOCA’04)
Jacobson G (1989) Space-efficient static trees and graphs. Symposium on Foundations of Computer Science 0:549–554
Jansson J, Sadakane K, Sung WK (2007) Ultra-succinct representation of ordered trees. In: Proceedings of the 18th Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 07), SIAM, pp 575–584
Johnson DS (2002) A theoretician’s guide to the experimental analysis of algorithms. In: Data Structures, Near Neighbor Searches, and Methodology: Fifth and Sixth DIMACS Implementation Challenges, AMS, pp 215–250
Kärkkäinen J, Sanders P, Burkhardt S (2006) Linear work suffix array construction. Journal of the ACM 53(6):918–936
Khachiyan LG (1979) A polynomial algorithm in linear programming. Dokl Akad Nauk SSSR 244:1093–1096, English translation in Soviet Math. Dokl. 20, 191–194, 1979
Kim DK, Sim JS, Park H, Park K (2005) Constructing suffix arrays in linear time. Journal of Discrete Algorithms 3(2–4):126–142
Klee V, Minty GJ (1972) How good is the simplex algorithm? In: Shisha O (ed) Inequalities III, Academic Press, pp 159–175
Knuth DE (1997) Art of Computer Programming, Volumes 1–3. Addison-Wesley Professional
Ko P, Aluru S (2005) Space efficient linear time construction of suffix arrays. Journal of Discrete Algorithms 3(2–4):143–156
Köhler E, Möhring RH, Schilling H (2004) Acceleration of shortest path computation. Article 42, Technische Universität Berlin, Fakultät II Mathematik und Naturwissenschaften
Korf I, Yandell M, Bedell J (2003) BLAST. O’Reilly
Kulla F, Sanders P (2007) Scalable parallel suffix array construction. Parallel Computing 33(9):605–612
Kurtz S (1999) Reducing the space requirement of suffix trees. Software–Practice and Experience 29:1149–1171
Lipman D, Pearson W (1985) Rapid and sensitive protein similarity searches. Science 227:1435–1441
Mäkinen V (2002) Compact suffix array: a space-efficient full-text index. Fundamenta Informaticae 56(1,2):191–210
Mäkinen V, Navarro G (2004) Compressed compact suffix arrays. In: Proceedings of the 15th Annual Symposium on Combinatorial Pattern Matching (CPM 04), Springer, LNCS, vol 3109, pp 420–433
Manber U, Myers G (1993) Suffix arrays: A new method for on-line string searches. SIAM Journal on Computing 22(5):935–948
Manzini G, Ferragina P (2004) Engineering a lightweight suffix array construction algorithm. Algorithmica 40(1):33–50
McCreight EM (1976) A space-economical suffix tree construction algorithm. Journal of the ACM 23(2):262–272
Mehlhorn K (1984) Graph algorithms and NP-completeness. Springer
Mehlhorn K, Mutzel P (1996) On the embedding phase of the Hopcroft and Tarjan planarity testing algorithm. Algorithmica 16(2):233–242
Mehlhorn K, Sanders P (2008) Algorithms and Data Structures: The Basic Toolbox. Springer
Meyer U, Sanders P, Sibeyn JF (eds) (2003) Algorithms for Memory Hierarchies, LNCS, vol 2625. Springer
Navarro G, Mäkinen V (2007) Compressed full-text indexes. ACM Computing Surveys 39(1):2
von Neumann J (1993) First draft of a report on the EDVAC. IEEE Annals of the History of Computing 15(4):27–75
Pearson W, Lipman D (1988) Improved tools for biological sequence comparison. In: Proceedings of the National Academy of Sciences USA, vol 85, pp 2444–2448
Polzin T, Daneshmand SV (2001) Improved algorithms for the Steiner problem in networks. Discrete Applied Mathematics 112(1–3):263–300
Puglisi SJ, Smyth WF, Turpin AH (2007) A taxonomy of suffix array construction algorithms. ACM Computing Surveys 39(2):4
Sadakane K (2003) New text indexing functionalities of the compressed suffix arrays. Journal of Algorithms 48(2):294–313
Sadakane K (2007) Compressed suffix trees with full functionality. Theor Comp Sys 41(4):589–607
Sanders P, Schultes D (2005) Highway hierarchies hasten exact shortest path queries. In: Proceedings 17th European Symposium on Algorithms (ESA 05), Springer, LNCS, vol 3669, pp 568–579
Sanders P, Mehlhorn K, Möhring R, Monien B, Mutzel P, Wagner D (2005) Description of the DFG algorithm engineering priority programme. Tech. rep., DFG, http://www.algorithm-engineering.de/beschreibung. pdf (in German)
Ukkonen E (1995) On-line construction of suffix trees. Algorithmica 14(3):249–260
Vitter JS (2001) External memory algorithms and data structures: Dealing with massive data. ACM Computing Surveys 33(2):209–271
Vitter JS, Shriver EAM (1994a) Algorithms for parallel memory I: Two-level memories. Algorithmica 12(2/3):110–147
Vitter JS, Shriver EAM (1994b) Algorithms for parallel memory II: Hierarchical multilevel memories. Algorithmica 12(2/3):148–169
Wagner D, Willhalm T (2003) Geometric speed-up techniques for finding shortest paths in large sparse graphs. In: Proceedings of the 11th Annual European Symposium on Algorithms (ESA 03), Springer, LNCS, vol 2832, pp 776–787
Weiner P (1973) Linear pattern matching algorithms. In: Proceedings of the 14th Annual Symposium on Switching and Automata Theory (SWAT 73), IEEE Computer Society, pp 1–11
Author information
Authors and Affiliations
Corresponding authors
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2010 Springer-Verlag Berlin Heidelberg
About this chapter
Cite this chapter
Chimani, M., Klein, K. (2010). Algorithm Engineering: Concepts and Practice. In: Bartz-Beielstein, T., Chiarandini, M., Paquete, L., Preuss, M. (eds) Experimental Methods for the Analysis of Optimization Algorithms. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-02538-9_6
Download citation
DOI: https://doi.org/10.1007/978-3-642-02538-9_6
Published:
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-02537-2
Online ISBN: 978-3-642-02538-9
eBook Packages: Computer ScienceComputer Science (R0)