In this chapter, we learn about (1) machine models, (2) how to measure the efficiency of algorithms, (3) data structures, (4) notations for the analysis of algorithms, (5) functions, and (6) graph theory. All of these are very basic, and we cannot omit any of them when learning about designing/analyzing algorithms. However, “basic” does not necessarily mean “easy” or “trivial.” If you are unable to understand the principle when you read the text for the first time, you do not need to be overly worried. You can revise it again when you learn concrete algorithms later. Some notions may require some concrete examples to ensure proper understanding. The contents of this section are basic tools for understanding algorithms. Although we need to know which tools we have available, we do not have to grasp all the detailed functions of these tools at first. It is not too late to only grasp the principles and usefulness of the tools when you use them.