UNICYCLE
Permutations with a Single Cycle
UNICYCLE
is a C++ library which
carries out some operations on permutations with a single cycle.
A permutation with a single cycle is a permutation P of N objects
with the property that, for every object, it takes exactly N applications
of P to restore an object to its original value.
Another way to think of this is that a permutation with a single cycle
can be symbolized by a bracelet with N beads; the action of the permutation
is to rotate the bracelet one position.
A permutation with a single cycle can be written in "sequence" form.
Assuming the objects are labeled 1 through N, we start with 1, followed
by P(1), followed by P(P(1)), and so on. Thus, the sequence (1,4,2,5,3)
indicates the permutation which maps 1>4, 2>5, 3>1, 4>2, and 5>3.
A permutation with a single cycle is sometimes called a "cyclic permutation",
but this term is also used with other meanings. Hence, we will affectionately
call these objects "unicycles".
Licensing:
The computer code and data files described and made available on this
web page are distributed under
the GNU LGPL license.
Languages:
UNICYCLE is available in
a C version and
a C++ version and
a FORTRAN77 version and
a FORTRAN90 version and
a MATLAB version and
a Python version.
Related Data and Programs:
COMBO,
a C++ library which
includes many combinatorial routines.
SUBSET,
a C++ library which
generates, ranks and unranks various combinatorial objects.
Source Code:
Examples and Tests:
List of Routines:

I4_FACTORIAL computes the factorial of N.

I4_MAX returns the maximum of two I4's.

I4_MIN returns the minimum of two I4's.

I4_MODP returns the nonnegative remainder of I4 division.

I4_UNIFORM returns a scaled pseudorandom I4.

I4_WRAP forces an I4 to lie between given limits by wrapping.

I4VEC_INDICATOR sets an I4VEC to the indicator vector.

I4VEC_INDICATOR_NEW sets an I4VEC to the indicator vector.

I4VEC_REVERSE reverses the elements of an I4VEC.

PERM_CHECK checks a representation of a permutation.

PERM_ENUM enumerates the permutations on N digits.

PERM_INVERSE computes the inverse of a permutation.

PERM_IS_UNICYCLE is TRUE if a permutation is a unicycle.

PERM_LEX_NEXT computes the lexicographic permutation successor.

PERM_LEX_RANK computes the lexicographic rank of a permutation.

PERM_LEX_UNRANK computes the permutation of given lexicographic rank.

PERM_PRINT prints a permutation.

PERM_RANDOM selects a random permutation of N objects.

S_LEN_TRIM returns the length of a string to the last nonblank.

TIMESTAMP prints the current YMDHMS date as a time stamp.

UNICYCLE_CHECK checks that a vector represents a unicycle.

UNICYCLE_ENUM enumerates the unicycles.

UNICYCLE_INDEX returns the index form of a unicycle.

UNICYCLE_INDEX_PRINT prints a unicycle given in index form.

UNICYCLE_INDEX_TO_SEQUENCE converts a unicycle from index to sequence form.

UNICYCLE_INVERSE returns the inverse of a unicycle.

UNICYCLE_NEXT generates unicycles in lexical order, one at a time.

UNICYCLE_PRINT prints a unicycle given in sequence form.

UNICYCLE_RANDOM selects a random unicycle of N objects.

UNICYCLE_RANK computes the rank of a unicycle.

UNICYCLE_UNRANK "unranks" a unicycle.
You can go up one level to
the C++ source codes.
Last revised on 16 June 2012.