Re: find subsets

• To: mathgroup at smc.vnet.net
• Subject: [mg104738] Re: [mg104694] find subsets
• From: Leonid Shifrin <lshifr at gmail.com>
• Date: Sun, 8 Nov 2009 06:47:46 -0500 (EST)
• References: <200911071147.GAA09918@smc.vnet.net>

```Hi,

for initial set not too large, the following function should do:

Clear[getSubsets]
getSubsets[sets_List, all_List] :=
Select[sets, Complement[all, #] === {} &];
getSubsets[sets_List, all_List, {}] := getSubsets[sets, all];
getSubsets[sets_List, all_List, oneOf_List] :=
Select[getSubsets[sets, all], MemberQ[#, Alternatives @@ oneOf] &];

It will find all sublists which contain *all* of the elements in <all>
argument and *at least one* of the elements of <oneOf> argument (which can
be omitted altogether). For example:

In[1] :=
ClearAll[a, b, c, d, e, f, g, h];
sets = Subsets[{a, b, c, d, e, f, g, h}, {6}];

In[2]:=
getSubsets[sets,{a,b,g},{}]

Out[2]:=
{{a,b,c,d,e,g},{a,b,c,d,f,g},{a,b,c,d,g,h},{a,b,c,e,f,g},{a,b,c,e,g,h},{a,b,c,f,g,h},{a,b,d,e,f,g},{a,b,d,e,g,h},{a,b,d,f,g,h},{a,b,e,f,g,h}}

In[3]:=
getSubsets[sets,{a,b},{c,d}]

Out[3]=
{{a,b,c,d,e,f},{a,b,c,d,e,g},{a,b,c,d,e,h},{a,b,c,d,f,g},{a,b,c,d,f,h},{a,b,c,d,g,h},{a,b,c,e,f,g},{a,b,c,e,f,h},{a,b,c,e,g,h},{a,b,c,f,g,h},{a,b,d,e,f,g},{a,b,d,e,f,h},{a,b,d,e,g,h},{a,b,d,f,g,h}}

If the initial set is large, the above approach may turn inefficient due to
a vary large number of elements in the initial list of subsets. You may want
then to take the requirement of presence of certain elements into account
already at the point when you generate the subsets.

Regards,
Leonid

On Sat, Nov 7, 2009 at 3:47 AM, r_poetic <radford.schantz at mms.gov> wrote:

> Hello,
> here is a quick question from a novice.
>
> First, generate a list of subsets using Subsets or KSubsets
> functions.
>
> Ns = KSubsets[{a,b,c,d,e},3] = {{a,b,c},{a,b,d},{a,b,e},{a,c,d}, etc.}
>
> How can one infer from that list a list of its members that contain
> given elements, e.g. a list of members that contain b, or those that
> contain both b and c? For illustration:
>
> Some_function[Ns, b and c] = { {a,b,c},{b,c,d},{b,c,e}}
>
> I keep thinking there must be a direct way to do this using Select or
> some other function?
>
>

```

• References:
• Prev by Date: Re: Strange behavior when using pattern match and HoldAll
• Next by Date: Re: fitting
• Previous by thread: Re: find subsets
• Next by thread: Re: find subsets