Chapter 3: Analysis Tools

In a classic story, the famous
mathematician Archimedes was asked to determine if a
golden crown commissioned by the king was indeed pure gold, and not
part silver, as an informant had claimed. Archimedes discovered a way
to determine this while stepping into a (Greek) bath. He noted that
water spilled out of the bath in proportion to the amount of him that
went in. Realizing the implications of this fact, he immediately got
out of the bath and ran naked through the city shouting, `Eureka,
eureka!,' for he had discovered an analysis tool (displacement),
which, when combined with a simple scale, could determine if the
king's new crown was good or not. This discovery was unfortunate for the
goldsmith, however, for when Archimedes did his analysis, the crown
displaced more water than an equal-weight lump of pure gold,
indicating that the crown was not, in fact, pure gold.

In this book, we are interested in the design of `good'
data structures and algorithms.
Simply put, a data structure is a systematic way of organizing
and accessing data, and an algorithm is a step-by-step
procedure for performing some task in a finite amount of time. These
concepts are central to computing,
but
to be able
to classify some data structures and algorithms as `good,'
we must have precise ways of analyzing them.
The primary analysis tool we will use in this book involves characterizing
the running times of algorithms and data structure operations, with
space usage also being of interest. Running time
is a natural
measure of `goodness,' since time is a precious resource.
But focusing on
running time as a primary measure of
goodness raises an interesting question of how running time is
defined.
We address this question in this chapter.