[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-gsl] Why must k be less than n in a multiset?
From: |
Rhys Ulerich |
Subject: |
Re: [Help-gsl] Why must k be less than n in a multiset? |
Date: |
Fri, 9 Sep 2011 10:14:20 -0500 |
Hi Michael,
> I'm trying to create all multisets of length k=3 on sets of the form
> {1,...,n}, where n ranges from 1 to 9. So for n=1 I would expect to
> get only the multiset {{1,1,1}}; for n=2 I'd get {{1,1,1}}, {{1,1,2}},
> {{1,2,2}}, and {{2,2,2}}.
Quick aside, the returned values are in {0, ..., n-1} not {1, ..., n}.
> However, when I call gsl_multiset_calloc(n, 3) with n<3, I receive the
> run-time error:
>> gsl: init.c:42: ERROR: multiset length k must be an integer less than or
>> equal to n
> ...
> So my questions are (1) does anybody know why there is a check to
> ensure k<=n [in init.c at line 42] when this is not required of a multiset
It is a remnant of the code I modified to implement multisets. I had
not needed anything further at the time and did not test the code for
k > n. Sorry about that.
> (2) what is
> the best way to obtain the behaviour I'm after, hopefully without
> having to rewrite existing code that works for n=3 to 9 (and
> presumably higher)?
Just quickly, I've tried commenting out the following from init.c
if (k > n)
{
GSL_ERROR_VAL ("multiset length k must be an integer less than or
equal to n",
GSL_EDOM, 0);
}
and running the following sample to accomplish the task you describe
#include <stdio.h>
#include <gsl/gsl_multiset.h>
int
main (void)
{
gsl_multiset * c;
size_t n;
const int k = 3;
for (n = 1; n <= 9; n++)
{
printf("n = %u\n", n);
c = gsl_multiset_calloc (n, k);
do
{
printf ("{");
gsl_multiset_fprintf (stdout, c, " %u");
printf (" }\n");
}
while (gsl_multiset_next (c) == GSL_SUCCESS);
printf("\n");
gsl_multiset_free (c);
}
return 0;
}
which appears to run just fine and gives the output following my
signature. Would you please review that output to see that it matches
your expectations? If it does, I will add this task as a test case to
multiset/test.c and will remove the overly restrictive check in
multiset/init.c. In the meantime, you could just comment out the line
in your local copy of init.c and rebuild GSL.
- Rhys
Output from above code compiled against trunk with init.c lines commented out:
n = 1
{ 0 0 0 }
n = 2
{ 0 0 0 }
{ 0 0 1 }
{ 0 1 1 }
{ 1 1 1 }
n = 3
{ 0 0 0 }
{ 0 0 1 }
{ 0 0 2 }
{ 0 1 1 }
{ 0 1 2 }
{ 0 2 2 }
{ 1 1 1 }
{ 1 1 2 }
{ 1 2 2 }
{ 2 2 2 }
n = 4
{ 0 0 0 }
{ 0 0 1 }
{ 0 0 2 }
{ 0 0 3 }
{ 0 1 1 }
{ 0 1 2 }
{ 0 1 3 }
{ 0 2 2 }
{ 0 2 3 }
{ 0 3 3 }
{ 1 1 1 }
{ 1 1 2 }
{ 1 1 3 }
{ 1 2 2 }
{ 1 2 3 }
{ 1 3 3 }
{ 2 2 2 }
{ 2 2 3 }
{ 2 3 3 }
{ 3 3 3 }
n = 5
{ 0 0 0 }
{ 0 0 1 }
{ 0 0 2 }
{ 0 0 3 }
{ 0 0 4 }
{ 0 1 1 }
{ 0 1 2 }
{ 0 1 3 }
{ 0 1 4 }
{ 0 2 2 }
{ 0 2 3 }
{ 0 2 4 }
{ 0 3 3 }
{ 0 3 4 }
{ 0 4 4 }
{ 1 1 1 }
{ 1 1 2 }
{ 1 1 3 }
{ 1 1 4 }
{ 1 2 2 }
{ 1 2 3 }
{ 1 2 4 }
{ 1 3 3 }
{ 1 3 4 }
{ 1 4 4 }
{ 2 2 2 }
{ 2 2 3 }
{ 2 2 4 }
{ 2 3 3 }
{ 2 3 4 }
{ 2 4 4 }
{ 3 3 3 }
{ 3 3 4 }
{ 3 4 4 }
{ 4 4 4 }
n = 6
{ 0 0 0 }
{ 0 0 1 }
{ 0 0 2 }
{ 0 0 3 }
{ 0 0 4 }
{ 0 0 5 }
{ 0 1 1 }
{ 0 1 2 }
{ 0 1 3 }
{ 0 1 4 }
{ 0 1 5 }
{ 0 2 2 }
{ 0 2 3 }
{ 0 2 4 }
{ 0 2 5 }
{ 0 3 3 }
{ 0 3 4 }
{ 0 3 5 }
{ 0 4 4 }
{ 0 4 5 }
{ 0 5 5 }
{ 1 1 1 }
{ 1 1 2 }
{ 1 1 3 }
{ 1 1 4 }
{ 1 1 5 }
{ 1 2 2 }
{ 1 2 3 }
{ 1 2 4 }
{ 1 2 5 }
{ 1 3 3 }
{ 1 3 4 }
{ 1 3 5 }
{ 1 4 4 }
{ 1 4 5 }
{ 1 5 5 }
{ 2 2 2 }
{ 2 2 3 }
{ 2 2 4 }
{ 2 2 5 }
{ 2 3 3 }
{ 2 3 4 }
{ 2 3 5 }
{ 2 4 4 }
{ 2 4 5 }
{ 2 5 5 }
{ 3 3 3 }
{ 3 3 4 }
{ 3 3 5 }
{ 3 4 4 }
{ 3 4 5 }
{ 3 5 5 }
{ 4 4 4 }
{ 4 4 5 }
{ 4 5 5 }
{ 5 5 5 }
n = 7
{ 0 0 0 }
{ 0 0 1 }
{ 0 0 2 }
{ 0 0 3 }
{ 0 0 4 }
{ 0 0 5 }
{ 0 0 6 }
{ 0 1 1 }
{ 0 1 2 }
{ 0 1 3 }
{ 0 1 4 }
{ 0 1 5 }
{ 0 1 6 }
{ 0 2 2 }
{ 0 2 3 }
{ 0 2 4 }
{ 0 2 5 }
{ 0 2 6 }
{ 0 3 3 }
{ 0 3 4 }
{ 0 3 5 }
{ 0 3 6 }
{ 0 4 4 }
{ 0 4 5 }
{ 0 4 6 }
{ 0 5 5 }
{ 0 5 6 }
{ 0 6 6 }
{ 1 1 1 }
{ 1 1 2 }
{ 1 1 3 }
{ 1 1 4 }
{ 1 1 5 }
{ 1 1 6 }
{ 1 2 2 }
{ 1 2 3 }
{ 1 2 4 }
{ 1 2 5 }
{ 1 2 6 }
{ 1 3 3 }
{ 1 3 4 }
{ 1 3 5 }
{ 1 3 6 }
{ 1 4 4 }
{ 1 4 5 }
{ 1 4 6 }
{ 1 5 5 }
{ 1 5 6 }
{ 1 6 6 }
{ 2 2 2 }
{ 2 2 3 }
{ 2 2 4 }
{ 2 2 5 }
{ 2 2 6 }
{ 2 3 3 }
{ 2 3 4 }
{ 2 3 5 }
{ 2 3 6 }
{ 2 4 4 }
{ 2 4 5 }
{ 2 4 6 }
{ 2 5 5 }
{ 2 5 6 }
{ 2 6 6 }
{ 3 3 3 }
{ 3 3 4 }
{ 3 3 5 }
{ 3 3 6 }
{ 3 4 4 }
{ 3 4 5 }
{ 3 4 6 }
{ 3 5 5 }
{ 3 5 6 }
{ 3 6 6 }
{ 4 4 4 }
{ 4 4 5 }
{ 4 4 6 }
{ 4 5 5 }
{ 4 5 6 }
{ 4 6 6 }
{ 5 5 5 }
{ 5 5 6 }
{ 5 6 6 }
{ 6 6 6 }
n = 8
{ 0 0 0 }
{ 0 0 1 }
{ 0 0 2 }
{ 0 0 3 }
{ 0 0 4 }
{ 0 0 5 }
{ 0 0 6 }
{ 0 0 7 }
{ 0 1 1 }
{ 0 1 2 }
{ 0 1 3 }
{ 0 1 4 }
{ 0 1 5 }
{ 0 1 6 }
{ 0 1 7 }
{ 0 2 2 }
{ 0 2 3 }
{ 0 2 4 }
{ 0 2 5 }
{ 0 2 6 }
{ 0 2 7 }
{ 0 3 3 }
{ 0 3 4 }
{ 0 3 5 }
{ 0 3 6 }
{ 0 3 7 }
{ 0 4 4 }
{ 0 4 5 }
{ 0 4 6 }
{ 0 4 7 }
{ 0 5 5 }
{ 0 5 6 }
{ 0 5 7 }
{ 0 6 6 }
{ 0 6 7 }
{ 0 7 7 }
{ 1 1 1 }
{ 1 1 2 }
{ 1 1 3 }
{ 1 1 4 }
{ 1 1 5 }
{ 1 1 6 }
{ 1 1 7 }
{ 1 2 2 }
{ 1 2 3 }
{ 1 2 4 }
{ 1 2 5 }
{ 1 2 6 }
{ 1 2 7 }
{ 1 3 3 }
{ 1 3 4 }
{ 1 3 5 }
{ 1 3 6 }
{ 1 3 7 }
{ 1 4 4 }
{ 1 4 5 }
{ 1 4 6 }
{ 1 4 7 }
{ 1 5 5 }
{ 1 5 6 }
{ 1 5 7 }
{ 1 6 6 }
{ 1 6 7 }
{ 1 7 7 }
{ 2 2 2 }
{ 2 2 3 }
{ 2 2 4 }
{ 2 2 5 }
{ 2 2 6 }
{ 2 2 7 }
{ 2 3 3 }
{ 2 3 4 }
{ 2 3 5 }
{ 2 3 6 }
{ 2 3 7 }
{ 2 4 4 }
{ 2 4 5 }
{ 2 4 6 }
{ 2 4 7 }
{ 2 5 5 }
{ 2 5 6 }
{ 2 5 7 }
{ 2 6 6 }
{ 2 6 7 }
{ 2 7 7 }
{ 3 3 3 }
{ 3 3 4 }
{ 3 3 5 }
{ 3 3 6 }
{ 3 3 7 }
{ 3 4 4 }
{ 3 4 5 }
{ 3 4 6 }
{ 3 4 7 }
{ 3 5 5 }
{ 3 5 6 }
{ 3 5 7 }
{ 3 6 6 }
{ 3 6 7 }
{ 3 7 7 }
{ 4 4 4 }
{ 4 4 5 }
{ 4 4 6 }
{ 4 4 7 }
{ 4 5 5 }
{ 4 5 6 }
{ 4 5 7 }
{ 4 6 6 }
{ 4 6 7 }
{ 4 7 7 }
{ 5 5 5 }
{ 5 5 6 }
{ 5 5 7 }
{ 5 6 6 }
{ 5 6 7 }
{ 5 7 7 }
{ 6 6 6 }
{ 6 6 7 }
{ 6 7 7 }
{ 7 7 7 }
n = 9
{ 0 0 0 }
{ 0 0 1 }
{ 0 0 2 }
{ 0 0 3 }
{ 0 0 4 }
{ 0 0 5 }
{ 0 0 6 }
{ 0 0 7 }
{ 0 0 8 }
{ 0 1 1 }
{ 0 1 2 }
{ 0 1 3 }
{ 0 1 4 }
{ 0 1 5 }
{ 0 1 6 }
{ 0 1 7 }
{ 0 1 8 }
{ 0 2 2 }
{ 0 2 3 }
{ 0 2 4 }
{ 0 2 5 }
{ 0 2 6 }
{ 0 2 7 }
{ 0 2 8 }
{ 0 3 3 }
{ 0 3 4 }
{ 0 3 5 }
{ 0 3 6 }
{ 0 3 7 }
{ 0 3 8 }
{ 0 4 4 }
{ 0 4 5 }
{ 0 4 6 }
{ 0 4 7 }
{ 0 4 8 }
{ 0 5 5 }
{ 0 5 6 }
{ 0 5 7 }
{ 0 5 8 }
{ 0 6 6 }
{ 0 6 7 }
{ 0 6 8 }
{ 0 7 7 }
{ 0 7 8 }
{ 0 8 8 }
{ 1 1 1 }
{ 1 1 2 }
{ 1 1 3 }
{ 1 1 4 }
{ 1 1 5 }
{ 1 1 6 }
{ 1 1 7 }
{ 1 1 8 }
{ 1 2 2 }
{ 1 2 3 }
{ 1 2 4 }
{ 1 2 5 }
{ 1 2 6 }
{ 1 2 7 }
{ 1 2 8 }
{ 1 3 3 }
{ 1 3 4 }
{ 1 3 5 }
{ 1 3 6 }
{ 1 3 7 }
{ 1 3 8 }
{ 1 4 4 }
{ 1 4 5 }
{ 1 4 6 }
{ 1 4 7 }
{ 1 4 8 }
{ 1 5 5 }
{ 1 5 6 }
{ 1 5 7 }
{ 1 5 8 }
{ 1 6 6 }
{ 1 6 7 }
{ 1 6 8 }
{ 1 7 7 }
{ 1 7 8 }
{ 1 8 8 }
{ 2 2 2 }
{ 2 2 3 }
{ 2 2 4 }
{ 2 2 5 }
{ 2 2 6 }
{ 2 2 7 }
{ 2 2 8 }
{ 2 3 3 }
{ 2 3 4 }
{ 2 3 5 }
{ 2 3 6 }
{ 2 3 7 }
{ 2 3 8 }
{ 2 4 4 }
{ 2 4 5 }
{ 2 4 6 }
{ 2 4 7 }
{ 2 4 8 }
{ 2 5 5 }
{ 2 5 6 }
{ 2 5 7 }
{ 2 5 8 }
{ 2 6 6 }
{ 2 6 7 }
{ 2 6 8 }
{ 2 7 7 }
{ 2 7 8 }
{ 2 8 8 }
{ 3 3 3 }
{ 3 3 4 }
{ 3 3 5 }
{ 3 3 6 }
{ 3 3 7 }
{ 3 3 8 }
{ 3 4 4 }
{ 3 4 5 }
{ 3 4 6 }
{ 3 4 7 }
{ 3 4 8 }
{ 3 5 5 }
{ 3 5 6 }
{ 3 5 7 }
{ 3 5 8 }
{ 3 6 6 }
{ 3 6 7 }
{ 3 6 8 }
{ 3 7 7 }
{ 3 7 8 }
{ 3 8 8 }
{ 4 4 4 }
{ 4 4 5 }
{ 4 4 6 }
{ 4 4 7 }
{ 4 4 8 }
{ 4 5 5 }
{ 4 5 6 }
{ 4 5 7 }
{ 4 5 8 }
{ 4 6 6 }
{ 4 6 7 }
{ 4 6 8 }
{ 4 7 7 }
{ 4 7 8 }
{ 4 8 8 }
{ 5 5 5 }
{ 5 5 6 }
{ 5 5 7 }
{ 5 5 8 }
{ 5 6 6 }
{ 5 6 7 }
{ 5 6 8 }
{ 5 7 7 }
{ 5 7 8 }
{ 5 8 8 }
{ 6 6 6 }
{ 6 6 7 }
{ 6 6 8 }
{ 6 7 7 }
{ 6 7 8 }
{ 6 8 8 }
{ 7 7 7 }
{ 7 7 8 }
{ 7 8 8 }
{ 8 8 8 }