Re: Combination List
- To: mathgroup at smc.vnet.net
- Subject: [mg78111] Re: Combination List
- From: m.r at inbox.ru
- Date: Sat, 23 Jun 2007 07:07:10 -0400 (EDT)
- References: <f55qci$k58$1@smc.vnet.net><f58bk7$6ve$1@smc.vnet.net>
On Jun 20, 4:26 am, "Bruno Campanini" <B... at gmail.com> wrote:
>
> May I go on...
> What if I can have one or more repeated elements in subsets?
> That is the number of combinations of 3 elements out of 4
> - with one or more duplicated elements - is Binomial[4+3-1,3] = 20
>
> How can I get the list?
>
> Bruno
Here's one way:
In[1]:= f = Compile[{{n, _Integer}, {k, _Integer}},
Module[{ans, i = 1, j = 1, l = 1},
ans = Array[0 &, {Binomial[n + k - 1, k], k}];
While[True,
While[j <= k, ans[[i, j++]] = l];
If[i == Length@ans, Break[]];
While[ans[[i, --j]] == n,];
l = ans[[i++, j]] + 1;
ans[[i]] = ans[[i - 1]];
];
ans
]]
In[2]:= f[4, 3]
Out[2]= {{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}}
Maxim Rytin
m.r at inbox.ru