Re: set partitions, or mutually disjoint subsets
"Ruud H.G. van Tol" <[email protected]> Thu, 11 Dec 2025 00:53:40 +0100
| Newsgroups | gmane.comp.mathematics.pari.user |
|---|---|
| Message-ID | <[email protected]> |
On 2025-12-09 14:18, Ruud H.G. van Tol wrote:
> Mainly for fun, and to learn more about pari,
> I'm looking for an efficient way to transform a number N (width)
> into a set of K (binary) vectors (each of length K and at least one 1).
One way to do it:
? {
my( n= 6, k= 3, p= partitions(n,,[k,k]) );
foreach( p,q
, forperm( q,r
, print("=", Vec(r), "=");
my(b= 0);
for( i=1,#r
, my(d= vector(n));
for( j=1,r[i]
, d[b++]= 1
);
print(d)
)
);
print
);
}
=[1, 1, 4]=
[1, 0, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 0]
[0, 0, 1, 1, 1, 1]
=[1, 4, 1]=
[1, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 1]
=[4, 1, 1]=
[1, 1, 1, 1, 0, 0]
[0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 1]
=[1, 2, 3]=
[1, 0, 0, 0, 0, 0]
[0, 1, 1, 0, 0, 0]
[0, 0, 0, 1, 1, 1]
=[1, 3, 2]=
[1, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 0, 0]
[0, 0, 0, 0, 1, 1]
=[2, 1, 3]=
[1, 1, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0]
[0, 0, 0, 1, 1, 1]
=[2, 3, 1]=
[1, 1, 0, 0, 0, 0]
[0, 0, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 1]
=[3, 1, 2]=
[1, 1, 1, 0, 0, 0]
[0, 0, 0, 1, 0, 0]
[0, 0, 0, 0, 1, 1]
=[3, 2, 1]=
[1, 1, 1, 0, 0, 0]
[0, 0, 0, 1, 1, 0]
[0, 0, 0, 0, 0, 1]
=[2, 2, 2]=
[1, 1, 0, 0, 0, 0]
[0, 0, 1, 1, 0, 0]
[0, 0, 0, 0, 1, 1]
-- Ruud