This module defines the interface for AlignmentAlgorithms as
well as some helper classes. An AlignmentAlgorithm computes an alignment
of two given input sequences, given an AlignmentSpecification. An
AlignmentSpecification in turn is a vector of Comparators (refer to the
respective module for more information), such that the distance between
two elements of the input sequences can be computed. In that sense all
an AlignmentAlgorithm has to do is to implement the computation of an
Alignment, under the assumption that a distance between sequence
elements is given as the weighted sum of comparator distances, as
specified in the AlignmentSpecification.
An AlignmentAlgorithm does not need to calculate just a real-valued
distance between the input sequences but may also provide additional
information about the alignment in order to calculate a derivative.
To store such additional information this module contains the
AlignmentDerivativeAlgorithm. A usual implementation of this is classic
backtracing, which can be stored in an AlignmentPath object. If an
AlignmentAlgorithm returns several possible AlignmentPaths, they can
be stored in the PathList or PathMap datastructure.
To make an alignment distance differentiable, we usually employ the
Softmin approximation of the strict minimum. A standard implementation
is provided in the Softmin class.
For faster (parallel) computation of many different alignments or
derivatives we also provide the ParallelProcessingEngine, the
ParallelDerivativeEngine and the ParallelWeightDerivativeEngine.