++ed by:

2 PAUSE users
5 non-PAUSE users.

Jonathan Leto

# NAME

Math::GSL::Multiset - Multisets manipulation

# SYNOPSIS

``````    use Math::GSL::Multiset qw/:all/;

my \$ms = Math::GSL::Multiset->(\$n, \$k);

my \$value = \$ms->get(2);

# compute next multiset
\$ms->next;
# compute the previous multiset

# clone a multiset
my \$other = \$ms->clone();``````

# DESCRIPTION

A multiset c is represented by an array of k integers in the range 0 to n-1, where each value c_i may occur more than once. The multiset c corresponds to indices of k elements chosen from an n element vector with replacement. In mathematical terms, n is the cardinality of the multiset while k is the maximum multiplicity of any value.

## Object Oriented API

Handy Perl-style OO API for Multisets.

`new`

Creates a new multiset with parameters n, k and initializes it to the lexicographically first multiset element, i.e., 0 repeated k times.

``    my \$ms = Math::GSL::Multiset->(\$n, \$k);``
`init_first`

Initializes the multiset to the lexicographically first multiset element, i.e. 0 repeated k times.

``    \$ms->init_first;``
`init_last`

Initializes the multiset c to the lexicographically last multiset element, i.e. n-1 repeated k times.

``    \$ms->init_last;``
`get`

Returns the value of the i-th element of the multiset. If i lies outside the allowed range of 0 to k-1 then the error handler is invoked and 0 is returned.

``    my \$val = \$ms->get(\$k-1);``
`next`

Advances the multiset to the next multiset element in lexicographic order and returns GSL_SUCCESS. If no further multisets elements are available it returns GSL_FAILURE and leaves the multiset unmodified. Starting with the first multiset and repeatedly applying this function will iterate through all possible multisets of a given order.

``    \$ms->next();``
`prev`
``    \$ms->prev();``

Steps backwards from the multiset to the previous multiset element in lexicographic order, returning GSL_SUCCESS. If no previous multiset is available it returns GSL_FAILURE and leaves the multiset unmodified.

`to_list`

Creates a Perl list of integers with the values from the multiset, starting at index 0 and ending at index \$k-1.

``    @data = \$ms->to_list;``
`clone`

Creates a new multiset with the same size, and same values.

``    my \$new = \$ms->clone;``

## GSL API

For reference on these methds, please consult the GSL documentation.

`gsl_multiset_calloc`
`gsl_multiset_alloc`
`gsl_multiset_init_first`
`gsl_multiset_init_last`
`gsl_multiset_free`
`gsl_multiset_memcpy`
`gsl_multiset_get`
`gsl_multiset_n`
`gsl_multiset_k`
`gsl_multiset_data`
`gsl_multiset_valid`
`gsl_multiset_next`
`gsl_multiset_prev`
`gsl_multiset_fwrite`
`gsl_multiset_fread`
`gsl_multiset_fprintf`
`gsl_multiset_fscanf`

# AUTHORS

Jonathan "Duke" Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com>