Definition.
A symbol table is a data structure for key-value pairs that
supports two operations: insert (put) a new pair into the table and
search for (get) the value associated with a given key.
The central question is whether we can devise algorithms and data
structures that achieve logarithmic performance for both search and insert.
How can we achieve this goal? To support efficient insertion, it seems that
we need a linked structure. But a singly linked list forecloses the use of
binary search, because the efficiency of binary search depends on our
ability to get to the middle of any subarray quickly via indexing (and the
only way to get to the middle of a singly linked list is to follow links). To
combine the efficiency of binary search with the flexibility of linked
structures, we need more complicated data structures. That combination is
provided both by binary search trees and by hash tables.