# Set cover is NP Complete

__Problem____:__ Given a ground Set **X**, an integer **k**, and a collection of subsets **S _{i} of X**, the problem is to identify if there exists a collection of subsets whose union is X, with size

**at most k**.

** Proof:** An instance of the problem is an input specified to the problem. An instance of the Set Cover problem is a Ground set X, an integer k and a collection of subsets Si formed out of

**X**. Since an NP-complete problem, by definition, is a problem which is both NP and NP-Hard, the proof or statement that a problem is NP-Complete consists of two parts:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.

- The problem itself is NP-Complete.
- All other problems in NP class can be polynomial-time reducible to that. (B is poly-time reducible to C).

If the only second condition is satisfied, the problem is called NP-Hard. But it is not possible to reduce every NP problem into another NP problem to show its NP-Completeness all the time. That is why if we want to show a problem is NP-complete, prove that the problem is in NP and any NP-Complete problem is reducible to that. Thus, it can be verified that the set cover problem is NP-Complete using the following propositions:

If any problem is in__Set Cover is in NP:__**NP**, then given a ‘certificate’, which is a solution to the problem and an instance of the problem ( a collection of subsets, C of size k), we will be able to identify (whether solution is correct or not) certificate in polynomial time. This can be done by:

Provide a collection**C**of subsets of**size k**, we can iterate over each element in the subsets of collection and mark the elements in X which are covered. At the end, no elements should be uncovered in X.

This takes polynomial time with respect to the number of subsets in X. Hence, Set Cover is in NP.In order to prove set cover is NP Hard, we will perform a reduction from a known NP-Hard problem, that is, vertex cover to set cover problem.For the vertex cover problem, we have as input a graph__Set Cover is NP-Hard:__**G = (V, E)**and an integer k. Now, let the ground set- X = E, that is the set of edges in G.
- Subset S
_{u}for every**vertex u**in**V**, contains the edges incident to**u**.

Now, the following two propositions hold:

- Let us consider that
**k**sets**S**cover the ground set_{u1}, S_{u2}……S_{uk}**X**, then every**edge e**in**E**is adjacent to minimum one vertex from u1…uk, Therefore forming a vertex cover of**size k**. - Let us consider vertices
**u1…uk**form a vertex cover, then Su1 covers all edges incident at u1. Hence, the collection of sets**S**form set cover covering_{u1}, S_{u2}…S_{uk}**X**.

__Conclusion:__

The set-cover is **NP and NP-Hard**. Therefore, the **set-cover** is **NP-Complete**.