Algo找到满足给定要求的最少量的物品

时间:2013-06-07 18:32:21

标签: sql-server algorithm tsql

我想针对以下问题实施算法。稍后需要在T-SQL

中实施
  • 我有一套提供商 - 比如商店。每个商店都有它提供的一系列物品。商店之间的某些商品重叠,有些只出现在一家商店。
  • 我有一个项目列表 - 让我们说一个shopping列表,其中包含一组我想要的项目。

我现在必须找到提供ALL项目的商店组合,同时需要最少量的商店。

我很确定这个问题经常被解决,算法有自己的名字,但我无法通过搜索找到它。

2 个答案:

答案 0 :(得分:2)

对不起,我想我第一次误解了这个问题。你的问题基本上是Set Cover Problem NP-Complete。有启发式方法,但没有最佳解决方案。

(这是类似但不完全是你的问题,值得一看)Knapsack Problem

答案 1 :(得分:1)

不确定任何特定算法。但考虑到你的要求,我会:

  • 开始寻找列表中包含最多匹配项目的商店。
  • 迭代直至填写清单。

如果您想真正优化这一点,那么您可以寻找任何多余的商店。一个多余的商店将有你的清单中的一个或多个其他商店提供的物品。

再想一想,这可以使用二进制线性编程来解决。每个商店都是可变的,并且约束条件是每个商品必须由至少一个商店提供服务。然后,您尝试尽量减少商店数量。不确定如何在T-SQL中解决这个问题。