\chapter{Preface} \label{Preface}

One of the major differences between combinatorial computing
and other areas of computing such as statistics, numerical
analysis and linear programming is the use of complex data types. 
Whilst the built-in types, such as integers, reals, vectors, and matrices,
usually suffice in the other areas, combinatorial computing relies heavily 
on types like stacks, queues, dictionaries, sequences, sorted sequences, 
priority queues, graphs, points, segments, $\ldots$
In the fall of 1988, we started a project (called {\bf LEDA} for Library of
Efficient Data types and Algorithms) to build a small, but growing library 
of data types and algorithms in a form which allows them to be used by 
non-experts. We hope that the system will narrow the gap between algorithms
research, teaching, and implementation. The main features of LEDA are:

\begin{enumerate}
\item 
    LEDA provides a sizable collection of data types and algorithms in a form 
    which allows them to be used by non-experts. This
    collection includes most of the data types and algorithms described in the 
    text books of the area. 

\item 
    LEDA gives a precise and readable specification for each of the data types 
    and algorithms mentioned above.  The specifications are short (typically, 
    not more than a page), general (so as to allow several implementations), 
    and abstract (so as to hide all details of the implementation). 

\item
    For many efficient data structures access by position is important. In 
    LEDA, we use an item concept to cast positions into an abstract form. We 
    mention that most of the specifications given in the LEDA manual use this 
    concept, i.e., the concept is adequate for the description of many data 
    types. 

\item
    LEDA contains efficient implementations for each of the data types, e.g., 
    Fibonacci heaps for priority queues, skip lists and dynamic perfect 
    hashing for dictionaries, ...


\item
    LEDA contains a comfortable data type graph. It offers the standard 
    iterations such as ``for all nodes v of a graph G do'' or ``for all 
    neighbors w of v do'', it allows to add and delete vertices and edges 
    and it offers arrays and matrices indexed by nodes and edges,...  
    The data type graph allows to write programs for graph problems in a 
    form close to the typical text book presentation.


\item 
    LEDA is implemented by a \CC class library. It can be used with almost
    any \CC compiler that supports templates. 


\item
    {LEDA is available by anonymous ftp from {\bf ftp.mpi-sb.mpg.de} in
    directory /pub/LEDA. The distribution contains all sources, installation 
    instructions, a technical report, and the user manual.}


\item
    LEDA is not in the public domain, but can be used freely for research 
    and teaching. Information on a commercial license is available from the 
    authors or leda@mpi-sb.mpg.de.

\end{enumerate}

This manual contains the specifications of all data types and algorithms 
currently available in LEDA. Users should be familiar with the \CC 
programming language (see \cite{S91} or \cite{Li89}).  The manual 
is structured as follows: In chapter one, which is a prerequisite for all
other chapters, we discuss the basic concepts and notations used in LEDA.
The other chapters define the data types and algorithms available in
LEDA and give examples of their use. These chapters can be consulted
independently from one another.

\newpage
{\large\bf New in Version 3.5}

Please read the CHANGES and FIXES files in the LEDA root directory 
for details.

\begin{itemize}

\item Version Macro\\
\_\_LEDA\_\_  (defined to 350 in this version)


\item Data Types\\
-- GraphWin        :  graph editor
-- ps\_file        :  postsript converter
-- map2\<I1,I2,E\> :  two-dimensional maps (sparce matrices)\\
-- node\_map2\<E\> :  two-dimensional node maps (sparse node matrices)


\item Memory Management\\
-- now can handle blocks of arbitrary size 


\item Number Types\\
-- new more efficient implementation of $bigfloat$ and $real$

\item Lists (list\<T\>)\\
-- STL Iterators (list\<T\>::[const\_]iterator) and Operations

\item Graphs\\
-- 20 %% Space Reduction\\
-- Bucket Sort for Node and Edge Lists\\
-- Join and Merge Operations\\
-- New Operations for (Planar) Maps\\
-- Random Choice of nodes and edges ($choose\_node/edge$)\\
-- Animation and Callback-Functions\\
-- New File Format


\item 2D Geometry\\
 - Faster Algorithms for Delaunay Triangulation and Voronoi Diagrams \\
 - Furthest Point Delaunay Triangulation and Voronoin Diagrams\\
 - Euclidean Minimum Spanning \\
 - Largest Empty and Smalles Enclosing Circle\\
 - Minimum Width and Minimum Area Annulus


\item 3D Geometry\\
 - Points (d3\_point and d3\_rat\_point)\\
 - Planes (d3\_plane and d3\_rat\_plane)\\
 - Convex Hull (for d3\_point and d3\_rat\_point)\\


\item Windows and Panels\\
 - Bitmaps in choice items and buttons\\
 - Multiple choice items\\
 - Improved Pull-down menues\\
 - Timer


\end{itemize}
