Provided by: tcllib_1.21+dfsg-1_all bug

NAME

       math::combinatorics - Combinatorial functions in the Tcl Math Library

SYNOPSIS

       package require Tcl  8.2

       package require math  ?1.2.3?

       package require Tcl  8.6

       package require TclOO

       package require math::combinatorics  ?2.0?

       ::math::ln_Gamma z

       ::math::factorial x

       ::math::choose n k

       ::math::Beta z w

       ::math::combinatorics::permutations n

       ::math::combinatorics::variations n k

       ::math::combinatorics::combinations n k

       ::math::combinatorics::derangements n

       ::math::combinatorics::catalan n

       ::math::combinatorics::firstStirling n m

       ::math::combinatorics::secondStirling n m

       ::math::combinatorics::partitionP n

       ::math::combinatorics::list-permutations n

       ::math::combinatorics::list-variations n k

       ::math::combinatorics::list-combinations n k

       ::math::combinatorics::list-derangements n

       ::math::combinatorics::list-powerset n

       ::math::combinatorics::permutationObj new/create NAME n

       $perm next

       $perm reset

       $perm setElements elements

       $perm setElements

       ::math::combinatorics::combinationObj new/create NAME n k

       $combin next

       $combin reset

       $combin setElements elements

       $combin setElements

________________________________________________________________________________________________________________

DESCRIPTION

       The  math  package  contains  implementations  of several functions useful in combinatorial problems. The
       math::combinatorics extends the collections based on features in Tcl  8.6.   Note:  the  meaning  of  the
       partitionP   function,   Catalan   and   Stirling   numbers   is   explained  on  the  MathWorld  website
       [http://mathworld.wolfram.com]

COMMANDS

       ::math::ln_Gamma z
              Returns the natural logarithm of the Gamma function for the argument z.

              The Gamma function is defined as the improper integral from zero to positive infinity of

                t**(x-1)*exp(-t) dt

       The approximation used in the Tcl Math Library is from Lanczos, ISIAM J. Numerical  Analysis,  series  B,
       volume 1, p. 86.  For "x > 1", the absolute error of the result is claimed to be smaller than 5.5*10**-10
       -- that is, the resulting value of Gamma when

                exp( ln_Gamma( x) )

              is computed is expected to be precise to better than nine significant figures.

       ::math::factorial x
              Returns the factorial of the argument x.

              For integer x, 0 <= x <= 12, an exact integer result is returned.

              For  integer  x,  13  <= x <= 21, an exact floating-point result is returned on machines with IEEE
              floating point.

              For integer x, 22 <= x <= 170, the result is exact to 1 ULP.

              For real x, x >= 0, the result is approximated by computing Gamma(x+1) using the  ::math::ln_Gamma
              function, and the result is expected to be precise to better than nine significant figures.

              It is an error to present x <= -1 or x > 170, or a value of x that is not numeric.

       ::math::choose n k
              Returns the binomial coefficient C(n, k)

                 C(n,k) = n! / k! (n-k)!

              If  both  parameters  are  integers  and  the  result fits in 32 bits, the result is rounded to an
              integer.

              Integer results are exact up to at least n = 34.  Floating point results  are  precise  to  better
              than nine significant figures.

       ::math::Beta z w
              Returns the Beta function of the parameters z and w.

                 Beta(z,w) = Beta(w,z) = Gamma(z) * Gamma(w) / Gamma(z+w)

              Results  are  returned  as  a floating point number precise to better than nine significant digits
              provided that w and z are both at least 1.

       ::math::combinatorics::permutations n
              Return the number of permutations of n items. The returned number is always an integer, it is  not
              limited by the range of 32-or 64-bits integers using the arbitrary precision integers available in
              Tcl 8.5 and later.

              int n  The number of items to be permuted.

       ::math::combinatorics::variations n k
              Return  the  number  of  variations  k items selected from the total of n items.  The order of the
              items is taken into account.

              int n  The number of items to be selected from.

              int k  The number of items to be selected in each variation.

       ::math::combinatorics::combinations n k
              Return the number of combinations of k items selected from the total of n items.  The order of the
              items is not important.

              int n  The number of items to be selected from.

              int k  The number of items to be selected in each combination.

       ::math::combinatorics::derangements n
              Return the number of derangements of n items. A derangement is a permutation where  each  item  is
              displaced from the original position.

              int n  The number of items to be rearranged.

       ::math::combinatorics::catalan n
              Return  the  n'th Catalan number. The number n is expected to be 1 or larger.  These numbers occur
              in various combinatorial problems.

              int n  The index of the Catalan number

       ::math::combinatorics::firstStirling n m
              Calculate a Stirling number of the first kind (signed version, m cycles  in  a  permutation  of  n
              items)

              int n  Number of items

              int m  Number of cycles

       ::math::combinatorics::secondStirling n m
              Calculate a Stirling number of the second kind (m non-empty subsets from n items)

              int n  Number of items

              int m  Number of subsets

       ::math::combinatorics::partitionP n
              Calculate the number of ways an integer n can be written as the sum of positive integers.

              int n  Number in question

       ::math::combinatorics::list-permutations n
              Return the list of permutations of the numbers 0, ..., n-1.

              int n  The number of items to be permuted.

       ::math::combinatorics::list-variations n k
              Return  the  list  of variations of k numbers selected from the numbers 0, ..., n-1.  The order of
              the items is taken into account.

              int n  The number of items to be selected from.

              int k  The number of items to be selected in each variation.

       ::math::combinatorics::list-combinations n k
              Return the list of combinations of k numbers selected from the numbers 0, ..., n-1.  The order  of
              the items is ignored.

              int n  The number of items to be selected from.

              int k  The number of items to be selected in each combination.

       ::math::combinatorics::list-derangements n
              Return the list of derangements of the numbers 0, ..., n-1.

              int n  The number of items to be rearranged.

       ::math::combinatorics::list-powerset n
              Return the list of all subsets of the numbers 0, ..., n-1.

              int n  The number of items to be rearranged.

       ::math::combinatorics::permutationObj new/create NAME n
              Create  a  TclOO  object  for  returning permutations one by one. If the last permutation has been
              reached an empty list is returned.

              int n  The number of items to be rearranged.

       $perm next
              Return the next permutation of n objects.

       $perm reset
              Reset the object, so that the command next returns the complete list again.

       $perm setElements elements
              Register a list of items to be permuted, using the nextElements command.

              list elements
                     The list of n items that will be permuted.

       $perm setElements
              Return the next permulation of the registered items.

       ::math::combinatorics::combinationObj new/create NAME n k
              Create a TclOO object for returning combinations one by one. If  the  last  combination  has  been
              reached an empty list is returned.

              int n  The number of items to be rearranged.

       $combin next
              Return the next combination of n objects.

       $combin reset
              Reset the object, so that the command next returns the complete list again.

       $combin setElements elements
              Register a list of items to be permuted, using the nextElements command.

              list elements
                     The list of n items that will be permuted.

       $combin setElements
              Return the next combination of the registered items.

BUGS, IDEAS, FEEDBACK

       This  document,  and  the package it describes, will undoubtedly contain bugs and other problems.  Please
       report such in the category math of the Tcllib Trackers  [http://core.tcl.tk/tcllib/reportlist].   Please
       also report any ideas for enhancements you may have for either package and/or documentation.

       When proposing code changes, please provide unified diffs, i.e the output of diff -u.

       Note  further  that  attachments  are strongly preferred over inlined patches. Attachments can be made by
       going to the Edit form of the ticket immediately after its creation, and then using the left-most  button
       in the secondary navigation bar.

CATEGORY

       Mathematics

tcllib                                                 2.0                             math::combinatorics(3tcl)