I am looking for an algorithm to solve the following problem. I am unsure whether to post this in computational science or here, but since this is an algorithm I thought I would try here first.

I have a set of species made from a number of components.

Let’s number each component $ 0, 1, 2 … n$ .

So now each species can be described as a set of these components.

I am given a set of species, and I need to check whether any subset of these species fulfills the following condition: that the number of species in this subset is greater than or equal to the number of unique components in this subset.

For example: the set of species {[0, 1, 2], [0, 2], [1, 2]} fulfills the criterion, as the set has 3 species and 3 unique components. The set of species {[0, 1, 2], [0, 2], [1, 2], [3,4]} also fulfills the criterion, as a subset of the set fulfills the criterion. The system {[0, 1, 2], [0, 2]} does not fulfill the criterion, as there are 2 species and 3 unique components.

In case it is relevant: there can be many species (40-50) and components (10-20) but the number of components per species remains relatively small (2-5)

Can this be done with polynomial time complexity? It seems kind of similar to the set cover problem, so I don’t have much hope.