Buy all items of a shopping list from minimum number of shops

I have a list of n items that I want to buy. (Each item is distinct)

list = {item1, item2, item3 .... itemn} 

I know k shops and list of items available on these shops.

shop1 = {item3, item5, item6 ...} shop2 = {item1, item5, item8 ...} ... shopk = {item1, item6, item8 ...} 

It is guaranteed that each item on my list is available on at least 1 of the k shops. Once you visit a shop, you can buy 1 or more number of items of your choice.

Question I want to minimize the number of shops I need to visit to buy all items on my list.

My Solution1 I used Brute force DFS with memoization. This gives optimal solution but has expensive complexity(O(n!)) and not feasible for my requirement. (k and n can reach up to 300 sometimes)

My Solution2 I used a greedy solution in which I visit the shop that offers maximum number of items on my list. Buy items, and remove all those items from list. I repeat this unless my shopping list is not empty. (All required items are not bought)

Although solution 2 runs very fast Unfortunately this solution is not optimal.

Working on Solution3 While googling, I found a similar problem that was solved using bipartite graph and flow. (I am still trying to set an analogy and check applicability of this approach for my problem)

Is this a known problem? If no, Is it possible to modify solution 2 to get optimal solution?

I would thankful if you can help me solving this problem by suggesting some code snippet in any language or any approach or keyword(algorithm name) etc

2

1 Answer

Is this a known problem?

Yes, this is a Set Cover Problem (specifically, its unweighted variety). It is known to be NP-complete, so you are currently limited to solutions that are either approximate or too slow to be practical.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like