【问题标题】:Given m bit strings of length n, find if there exist a set of exactly k bit strings such that at each position, only 1 bit string has a set bit给定 m 个长度为 n 的位串,找出是否存在一组恰好 k 个位串,使得在每个位置,只有 1 个位串有一个集合位
【发布时间】:2015-02-03 19:05:24
【问题描述】:

那是一口,所以让我解释一下。

假设我们有一组长度为3 -- {001, 100, 111, 010}k = 34 位串

这里的答案是true,因为在位串中的每个位置{0 .. n - 1} 处设置了{001, 100, 010},因此只有一个位串具有设置位。请注意,在所需的子集中,每个位置都应该有一个确切的 set 位。

另一个例子,考虑{10001, 01000, 00110}k = 3。这里的答案又是true

如果k = 2 则不是这样,因为我们希望所需集的基数为k.

【问题讨论】:

  • 有什么问题?
  • (我认为问题是How to decide the existence of a cover with the constraints described in sub-exponential time?(答案是“没人知道,很多人会傻眼地学习。”))如果m = k(第二个例子)是微不足道的.如果封面较小,则未设置位的字符串有助于达到k;让其他字符串是唯一的。设置的位数必须加起来为n。由于设置了更多位的字符串会排除更多其他字符串,因此从那里开始。

标签: algorithm


【解决方案1】:

这很难解决,因为如果你能解决这个问题,那么你就可以在多项式时间内解决Exact set cover problem。但是,已知精确集合覆盖是 NP 完全的。

【讨论】:

  • 我是否可以使用任何启发式方法来解决小输入大小的问题?
  • 对于非常小的问题,您可以使用蛮力 - 否则 Google 会使用 Donald Knuth 的 Dancing Links 算法。
  • 不过我的问题有点简单,我不想找到确切的子集,我只想找出是否存在。
  • @adijo 不幸的是,这并不容易。假设您有一种方法可以确定一个集合的存在,那么您可以简单地删除一个位字符串并使用您的方法来查看一个覆盖是否仍然存在。如果不是,那么您会发现您删除的位串必须在套装封面中。换句话说,确定一个封面的存在与寻找一个封面的实例基本上是同一个问题。
  • @user4235730 差不多,除了确切的封面不会影响封面只有 k 个元素的限制。
猜你喜欢
  • 2012-09-04
  • 1970-01-01
  • 2021-07-23
  • 2015-06-06
  • 1970-01-01
  • 2015-01-18
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多