       Re: Combinations

• To: mathgroup at smc.vnet.net
• Subject: [mg15217] Re: [mg15181] Combinations
• From: Jurgen Tischer <jtischer at col2.telecom.com.co>
• Date: Tue, 22 Dec 1998 04:01:46 -0500
• References: <199812180710.CAA03901@smc.vnet.net.>
• Sender: owner-wri-mathgroup at wolfram.com

```Since the problem can be stated as a set cover problem (one covers the
set of all t-subsets with the sets made out of the t-subsets of
u-subsets), Daniel's approach is the standard one. And set cover
problems are NP-hard. Since there is extra structure one can hope for
doing a little bit better. I used the suggestion of Daniel, but refined
it by selecting among the u-sets which cover a maximal number of the
remaining sets one that has a maximal overlap with already chosen
u-sets. (I found this condition by looking at lots of approximate
solutions of the greedy algorithm.) Looks like it works better, but of
course it's still a heuristic method without any proof of minimality.
And it's slow, I checked it only for very small numbers. (The time it
took me to write this little program shows how bad I am in that field.)

In:= <<DiscreteMath`Combinatorica`

In:= fu1[li_,ln_]:=

With[{li1=Flatten[KSubsets[#,3]&/@li,1]},Length/@(Complement[#,li1]&/@ln)]

In:= fu2[elem_,li_]:=Length[Intersection[elem,li]]

In:= newElem[li_,ln2_,ln21_]:=Module[{li1=fu1[li,ln21],
li2=Union[Flatten[li]],li3,m,elem},
li3=Extract[ln2,Position[li1,Max[li1]]];
m=Max[fu2[#,li2]&/@li3];
First[Select[li3,fu2[#,li2]==m&,1]]]

In:=
totlen[li_,len1_]:=Length[Union[Flatten[KSubsets[#,len1]&/@li,1]]]

In:= minCover[lentotal_,len1_,len2_]:=
Module[{ran=Range[lentotal],ln1,ln2,ln21,lenln1,li={Range[len2]}},
ln1=KSubsets[ran,len1];
lenln1=Length[ln1];
ln2=KSubsets[ran,len2];
ln21=KSubsets[#,len1]&/@ln2;
While[totlen[li,len1]<lenln1,AppendTo[li,newElem[li,ln2,ln21]]];
li]

In:= minCover[12,3,6]

Out=
{{1,2,3,4,5,6},{1,2,7,8,9,10},{3,4,7,8,11,12},{5,6,9,10,11,12},{1,2,3,9,11,

12},{1,4,5,7,10,11},{2,4,6,8,10,12},{3,5,6,7,8,9},{1,3,6,7,10,12},{1,4,5,

8,9,12},{2,3,5,8,10,11},{2,4,6,7,9,11},{1,3,6,8,9,11},{2,3,5,7,9,12},{1,2,
3,4,9,10}}

Jurgen

edsferr at uol.com.br wrote:
>
> Hello !
>
> I'm not sure if what I have is a difficult or an easy problem...
>
> Let L be this list : L={1,2,3,4,..,n} Let LNT be a list of all the
> combinations of the n elements in list L when you take t elements. We
> get LNT using KSubsets[L,t] Let u be an integer so t < u < n
> Let LNU be a list of all the combinations of the n elements in list L
> when you take u elements. We get LNU using KSubsets[L,u]
>
> Let's take one element of LNU: Due to the fact of t < u , this element
> of LNU "contains" exactly u!/(t!(u-y)!) elements of LNT when you take t
> elements of it.
>
> The question is: How can i get the shortest list of elements of LNU so
> we can "have" all the elements of LNT "inside" of this list ?
>
> Thanks !!!!!!!!!!!
>
> -----------== Posted via Deja News, The Discussion Network ==----------