This survey is meant to give an introduction to elementary techniques used for designing I/O-efficient algorithms. We do not
intend to give a complete survey of all state-of-the-art techniques; but rather we aim to provide the reader with a good understanding
of the most elementary techniques. Our focus is on general techniques and on techniques used in the design of I/O-efficient
graph algorithms. We include the latter because many abstract data structuring problems can be translated into classical graph
problems. While this fact is of mostly philosophical interest in general, it gains importance in I/O-efficient algorithms
because random access is penalized in external memory algorithms and standard techniques to extract information from graphs
can help when trying to extract information from pointer-based data structures.
Research supported by Natural Sciences and Engineering Research Council of Canada. Part of this work was done while the second
author was a Ph.D. student at the School of Computer Science of Carleton University.