unicycle
    
    
    
      unicycle,
      an Octave code 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 information on this web page is distributed under the MIT license.
    
    
      Languages:
    
    
      unicycle is available in
      a C version and
      a C++ version and
      a Fortran90 version and
      a MATLAB version and
      an Octave version and
      a Python version.
    
    
      Related Data and Programs:
    
    
      
      unicycle_test
    
    
      
      combo,
      an Octave code which
      includes many combinatorial routines.
    
    
      
      subset,
      an Octave code which
      generates, ranks and unranks various combinatorial objects.
    
    
      Source Code:
    
    
      
        - 
          i4_modp.m,
          returns the nonnegative remainder of I4 division.
        
 
        - 
          i4_uniform_ab.m,
          returns a scaled pseudorandom I4.
        
 
        - 
          i4_wrap.m,
          forces an I4 to lie between given limits by wrapping.
        
 
        - 
          i4vec_indicator.m,
          sets an I4VEC to the indicator vector.
        
 
        - 
          i4vec_reverse.m,
          reverses the elements of an I4VEC.
        
 
        - 
          perm_check.m,
          checks a representation of a permutation.
        
 
        - 
          perm_enum.m,
          enumerates the permutations on N digits.
        
 
        - 
          perm_inverse.m,
          computes the inverse of a permutation.
        
 
        - 
          perm_is_unicycle.m,
          is TRUE if a permutation is a unicycle.
        
 
        - 
          perm_lex_next.m,
          computes the lexicographic permutation successor.
        
 
        - 
          perm_lex_rank.m,
          computes the lexicographic rank of a permutation.
        
 
        - 
          perm_lex_unrank.m,
          computes the permutation of given lexicographic rank.
        
 
        - 
          perm_print.m,
          prints a permutation.
        
 
        - 
          perm_random.m,
          selects a random permutation of N objects.
        
 
        - 
          unicycle_check.m,
          checks that a vector represents a unicycle.
        
 
        - 
          unicycle_enum.m,
          enumerates the unicycles.
        
 
        - 
          unicycle_index.m,
          returns the index form of a unicycle.
        
 
        - 
          unicycle_index_print.m,
          prints a unicycle given in index form.
        
 
        - 
          unicycle_index_to_sequence.m,
          converts a unicycle from index o sequence form.
        
 
        - 
          unicycle_inverse.m,
          returns the inverse of a unicycle.
        
 
        - 
          unicycle_next.m,
          generates unicycles in lexical order, one at a time.
        
 
        - 
          unicycle_print.m,
          prints a unicycle given in sequence form.
        
 
        - 
          unicycle_random.m,
          selects a random unicycle of N objects.
        
 
        - 
          unicycle_rank.m,
          computes the rank of a unicycle.
        
 
        - 
          unicycle_unrank.m,
          "unranks" a unicycle.
        
 
      
    
    
    
      Last revised on 11 January 2021.