libsortnetwork
--------------
<http://octo.cx/sn>

Library for handling comparator networks in general and sort networks in
particular.


Utility applications
--------------------

The distribution includes a number of utility applications for handling sort
networks. Most tools operate in the typical UNIX fashion of reading from STDIN
and writing to STDOUT, so that it is able to chain tools together.

The distribution includes the following utility programs:

  * sn-apply
    Reads a list of values from STDIN and applies a given comparator network to
    the list. The resulting list of printed to STDOUT.

  * sn-bitonicmerge
    Creates a bitonic merge network with a given number of left and right
    inputs. The resulting network is printed to STDOUT.

  * sn-bitonicsort
    Creates a bitonic mergesort network with a given number of inputs and
    prints the network to STDOUT.

  * sn-check-bf
    Does a brute-force check whether a given comparator network is a sort
    network. It tries all 2^n 0-1-combinations resulting in exponential running
    time, so only small networks can be tested within a reasonable time.

  * sn-cut
    Removes one or more inputs by assuming positive or negative infinity to be
    applied to the inputs to remove.

  * sn-info
    Displays information about a comparator network in human readable form.

  * sn-merge
    Combines two sort networks using the odd-even or bitonic merge network.

  * sn-normalize
    Reads a sort network and prints a normalized version to STDOUT. A
    normalized sort network is a network in which all comparators face the same
    way.

  * sn-oddevenmerge
    Creates an odd-even merge network with a given number of left and right
    inputs. The resulting network is printed to STDOUT.

  * sn-oddevensort
    Creates an odd-even mergesort network with a given number of inputs and
    prints the network to STDOUT.

  * sn-pairwisesort
    Creates a pairwise sorting network based on the paper by Ian Parberry.
    The number of inputs must be a power of two.

  * sn-shmoo
    Prints a so-called "shmoo chart" of a comparator network to STDOUT. The
    running time of this tool is exponential, roughly O(m * 2^n) where m is the
    number of stages and n is the number of inputs.

  * sn-show
    Prints an ASCII version of a sort network to STDOUT.

  * sn-svg
    Prints the Scalable Vector Graphics (SVG) sources of a graphic
    representation of a comparator network to STDOUT.

  * sn-tex
    Prints the TikZ / TeX sources of a graphic representation of a comparator
    network to STDOUT.

  * sn-tex-cut
    Prints the TikZ / TeX sources of a graphic representation of a cut sequence
    to STDOUT.

  * sn-transpositionsort
    Creates an odd-even transpositionsort network with the given number of
    inputs and prints the network to STDOUT.

Experimental / research applications:

  * sn-bb
  * sn-bb-merge
  * sn-count-cuts
  * sn-count-markov
  * sn-markov
  * sn-evolution
  * sn-evolution2
  * sn-evolution-cut
  * sn-evolution-merge


License
-------

The libsortnetwork library is licensed under the GNU Lesser General Public
License, version 2.1 or later (LGPLv2.1+).

Other utility programs included in this distribution, for example
"sn-normalize", are licensed under the GNU General Public License, version 2
(GPLv2). The exact terms of this license can be found in the file "COPYING" in
the top source directory.


Author
------

libsortnetwork has been written by Florian "octo" Forster.
You can reach Florian at <ff at octo.it>.
