Implicit Data Structure
   HOME

TheInfoList



OR:

In
computer science Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includi ...
, an implicit data structure or space-efficient data structure is a data structure that stores very little information other than the main or required data: a data structure that requires low overhead. They are called "implicit" because the position of the elements carries meaning and relationship between elements; this is contrasted with the use of
pointers Pointer may refer to: Places * Pointer, Kentucky * Pointers, New Jersey * Pointers Airport, Wasco County, Oregon, United States * The Pointers, a pair of rocks off Antarctica People with the name * Pointer (surname), a surname (including a lis ...
to give an ''explicit'' relationship between elements. Definitions of "low overhead" vary, but generally means constant overhead; in big O notation, ''O''(1) overhead. A less restrictive definition is a
succinct data structure In computer science, a succinct data structure is a data structure which uses an amount of space that is "close" to the information-theoretic lower bound, but (unlike other compressed representations) still allows for efficient query operations. Th ...
, which allows greater overhead.


Definition

An implicit data structure is one with constant space overhead (above the
information-theoretic Information theory is the scientific study of the quantification, storage, and communication of information. The field was originally established by the works of Harry Nyquist and Ralph Hartley, in the 1920s, and Claude Shannon in the 1940s. T ...
lower bound). Historically, defined an implicit data structure (and algorithms acting on one) as one "in which structural information is implicit in the way data are stored, rather than explicit in pointers." They are somewhat vague in the definition, defining it most strictly as a single array, with only the size retained (a single number of overhead), or more loosely as a data structure with constant overhead (). This latter definition is today more standard, and the still-looser notion of a data structure with non-constant but small overhead is today known as a
succinct data structure In computer science, a succinct data structure is a data structure which uses an amount of space that is "close" to the information-theoretic lower bound, but (unlike other compressed representations) still allows for efficient query operations. Th ...
, as defined by ; it was referred to as semi-implicit by ."We will also suggest two structures which might be described as “semi-implicit,” in that a variable, but ''o''(''N''), number of pointers (indices) is kept.", p. 238 A fundamental distinction is between ''static'' data structures (read-only) and ''dynamic'' data structures (which can be modified). Simple implicit data structures, such as representing a sorted list as an array, may be very efficient as a static data structure, but inefficient as a dynamic data structure, due to modification operations (such as insertion in the case of a sorted list) being inefficient.


Examples

A trivial example of an implicit data structure is an '' array data structure'', which is an implicit data structure for a
list A ''list'' is any set of items in a row. List or lists may also refer to: People * List (surname) Organizations * List College, an undergraduate division of the Jewish Theological Seminary of America * SC Germania List, German rugby unio ...
, and requires only the constant overhead of the length; unlike a linked list, which has a pointer associated with each data element, which ''explicitly'' gives the relationship from one element to the next. Similarly, a ''
null-terminated string In computer programming, a null-terminated string is a character string stored as an array containing the characters and terminated with a null character (a character with a value of zero, called NUL in this article). Alternative names are C str ...
'' is an implicit data structure for a string (list of characters). These are considered very simple because they are static data structures (read-only), and only admit the simple operation of iteration over the elements. Similarly simple is representing a multi-dimensional array as a single 1-dimensional array, together with its dimensions. For example, representing an ''m'' × ''n'' array as a single list of length ''m·n'', together with the numbers ''m'' and ''n'' (instead of as a 1-dimensional array of pointers to each 1-dimensional subarray). The elements need not be of the same type, and a
table Table may refer to: * Table (furniture), a piece of furniture with a flat surface and one or more legs * Table (landform), a flat area of land * Table (information), a data arrangement with rows and columns * Table (database), how the table data ...
of data (a list of
records A record, recording or records may refer to: An item or collection of data Computing * Record (computer science), a data structure ** Record, or row (database), a set of fields in a database related to one entity ** Boot sector or boot record, r ...
) may similarly be represented implicitly as a flat (1-dimensional) list, together with the length of each
field Field may refer to: Expanses of open ground * Field (agriculture), an area of land used for agricultural purposes * Airfield, an aerodrome that lacks the infrastructure of an airport * Battlefield * Lawn, an area of mowed grass * Meadow, a grass ...
, so long as each field has uniform size (so a single size can be used per field, not per record). A less trivial example is representing a sorted list by a ''
sorted array A sorted array is an array data structure in which each element is sorted in numerical, alphabetical, or some other order, and placed at equally spaced addresses in computer memory. It is typically used in computer science to implement static l ...
'', which allows search in logarithmic time by
binary search In computer science, binary search, also known as half-interval search, logarithmic search, or binary chop, is a search algorithm that finds the position of a target value within a sorted array. Binary search compares the target value to the ...
. Contrast with a
search tree In computer science, a search tree is a tree data structure used for locating specific keys from within a set. In order for a tree to function as a search tree, the key for each node must be greater than any keys in subtrees on the left, and less ...
, specifically a
binary search tree In computer science, a binary search tree (BST), also called an ordered or sorted binary tree, is a rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left subtree and ...
, which also allows logarithmic-time search, but requires pointers. A sorted array is only efficient as a static data structure, as modifying the list is slow – unlike a binary search tree – but does not require the space overhead of a tree. An important example of an implicit data structure is representing a
perfect binary tree In computer science, a binary tree is a k-ary k = 2 tree data structure in which each node has at most two children, which are referred to as the ' and the '. A recursive definition using just set theory notions is that a (non-empty) binary t ...
as a list, in increasing order of depth, so root, first left child, first right child, first left child of first left child, etc. Such a tree occurs notably for an
ancestry chart A family tree, also called a genealogy or a pedigree chart, is a chart representing family relationships in a conventional tree structure. More detailed family trees, used in medicine and social work, are known as genograms. Representations of ...
to a given depth, and the implicit representation is known as an ''
Ahnentafel An ''ahnentafel'' (German for "ancestor table"; ) or ''ahnenreihe'' ("ancestor series"; ) is a genealogical numbering system for listing a person's direct ancestors in a fixed sequence of ascent. The subject (or proband) of the ahnentafel is l ...
'' (ancestor table). This can be generalized to a
complete binary tree In computer science, a binary tree is a k-ary k = 2 tree data structure in which each node has at most two children, which are referred to as the ' and the '. A recursive definition using just set theory notions is that a (non-empty) binary tr ...
(where the last level may be incomplete), which yields the best-known example of an implicit data structure, namely the ''
binary heap A binary heap is a heap data structure that takes the form of a binary tree. Binary heaps are a common way of implementing priority queues. The binary heap was introduced by J. W. J. Williams in 1964, as a data structure for heapsort. A bin ...
'', which is an implicit data structure for a priority queue. This is more sophisticated than earlier examples because it allows multiple operations, and is an efficient ''dynamic'' data structure (it allows efficient modification of the data): not only top, but also insert and pop. More sophisticated implicit data structures include the
beap A beap, or bi-parental heap, is a data structure where a node usually has two parents (unless it is the first or last on a level) and two children (unless it is on the last level). Unlike a heap, a beap allows sublinear search. The beap was intro ...
(bi-parental heap).


History

The trivial examples of lists or tables of values date to prehistory, while historically non-trivial implicit data structures date at least to the Ahnentafel, which was introduced by
Michaël Eytzinger Michaël Eytzinger (Freiherr Michael von Aitzing, Aitzinger, Eyzinger, or Eitzing) (born ca. 1530 in Obereitzing - died 1598 in Bonn), was an Austrian nobleman, diplomat, historian, and publicist, who wrote and published several works, includi ...
in 1590 for use in genealogy. In formal computer science, the first implicit data structure is generally considered to be the sorted list, used for binary search, which was introduced by
John Mauchly John William Mauchly (August 30, 1907 – January 8, 1980) was an American physicist who, along with J. Presper Eckert, designed ENIAC, the first general-purpose electronic digital computer, as well as EDVAC, BINAC and UNIVAC I, the first ...
in 1946, in the
Moore School Lectures ''Theory and Techniques for Design of Electronic Digital Computers'' (popularly called the "Moore School Lectures") was a course in the construction of electronic digital computers held at the University of Pennsylvania's Moore School of Electrical ...
, the first ever set of lectures regarding any computer-related topic. The binary heap was introduced in to implement the
heapsort In computer science, heapsort is a comparison-based sorting algorithm. Heapsort can be thought of as an improved selection sort: like selection sort, heapsort divides its input into a sorted and an unsorted region, and it iteratively shrinks the ...
. The notion of an implicit data structure was formalized in , as part of introducing and analyzing the
beap A beap, or bi-parental heap, is a data structure where a node usually has two parents (unless it is the first or last on a level) and two children (unless it is on the last level). Unlike a heap, a beap allows sublinear search. The beap was intro ...
.


References

* * {{refend


Further reading

See publications o
Hervé Brönnimann
J. Ian Munro, an
Greg Frederickson
Data structures