Date: Aug 21, 2012 7:01 AM
Author: Bruno Luong
Subject: Re: generation of random multiset permutation with restrictions
"Michal Kvasnicka" wrote in message <k0vp6r$83h$1@newscl01ah.mathworks.com>...

> "Bruno Luong" <b.luong@fogale.findmycountry> wrote in message <k0visb$hog$1@newscl01ah.mathworks.com>...

> > This should work for standard array p:

> >

> > OK = @(p) isequal(sort(a),sort(p)) && all(arrayfun(@(x,s) ismember(x,s{1}),p,s));

> >

> > % Bruno

>

> Your solution is very elegant and effective. Thanks again!

>

> Is there any reason to completely eliminate cells (e.g. s = {[3],[1,2],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[2,3],[2,3]};) from the numerical intensive computation and work only with standard arrays? OK function (and previous method for generation of random multiset permutation with restrictions) will be called very often (about 10^3-10^6 times), so I am looking for fastest method as possible.

If your set is not too large you might use logical array to store a set, e.g.

{3} is coded as [0 0 1]';

{1 2} is coded as [1 1 0]';

And s as

[0 0 1; 1 1 0; 1 1 1; 1 1 1; 1 1 1; 0 1 1; 0 1 1]' ;

Bruno