1 Reply Latest reply: Dec 6, 2010 11:25 AM by Darryl Gove-Oracle

# Set Cover Problem

I am working on the set cover problem and I would really appreciate some help.

I wanted to create another java program which does the following:

Input: different sizes of sets and the universe, let’s say that the universe contains elements 1 through 100.
The program will create all the combinations of sets to find out what is the smaller number of sets that cover the universe. Following is an example:

U={1,2,3,4,5,6,7,8,9,10}
s1={1,2,3,8,9,10}
s2={1,2,3,4,5}
s3={4,5,7}
s4={5,6,7}
s5={6,7,8,9,10}

The program will generate all the combinations of the above sets. It will start with individual sets, and then it will make all possible combinations of two sets, then three,..... For the above example, it will generate 32 sets.

and then it will output that set2 and set5 cover the universe.

I was wondering if anyone could help me write the algorithm or pseudo code for the above example, so that I can write a java program based on that. I already wrote a program based on the greedy method. For some reason, I can not figure out how to start writing this program and If someone could show me the algorithm/pseudo-code, I would greatly appreciate it. Thanks so much in advance.

This is what I wrote so far:
for size in 1..|S|:
combination(S, n) //this creates cobinations of n with the subesets of C
if(union(c)==universe)
then return C.

As you can see, I have no idea how to design an algorithm. Please help me write this algorithm.
• ###### 1. Re: Set Cover Problem
If you wish to enumerate all the combinations, then I'd suggest a different approach. If each set is either included or not included, then you can represent this as a bit pattern. Bit 0 = set 0 enabled, Bit 1 = set 1 enabled. Then you could count 1-31 (in your example, and this would enable all the possible combinations of sets. Then you just need to check whether the enabled sets produce a covering.

Darryl.