假设您给出长度为k的N位数组。意思是每个向量v i 的形式为{1,0,0,1 ... 1}(k个成分)等。
现在我想找到最小索引集S = {I 0 ,I 1 ...,I q-1 } ,0 <= I i &lt; = k-1,使得
当在S上评估v i 时,它给出二进制序列{v i [I 0 ],v i < / sub> [I 1 ] ..}对于每个v i 是唯一的。
因此,例如,如果有64个向量{v 0 ... v 63 },则最小索引集| S |在给定v i 的情况下,大小为6可能非常长且完全不同。因为2 6 = 64。
应用程序是给定一个固定的黑白图片列表,0 ... 63,你知道输入将是那些图片之一,图片足够大,你只需要检查输入的6个像素弄清楚它是哪张照片。
这个问题似乎应该已经证明是NP或在某处解决了。
任何提示?谢谢。
答案 0 :(得分:2)
我无法找到与此相对应的NP难题,但我确定它是NP难的。我希望有人可以挖出一个,因为我认为我已经遇到了几个不同的伪装问题。如果没有,如果我有时间,我可能会稍后尝试减少。
每列将图像集分成两部分;我们从包含所有图像的单个集合开始,我们的目标是到达一个分区,其中每个部分(在分区中设置)由单个图像组成,并且使用尽可能少的列。
一种方法是制作和解决Minimum Set Cover problem,其中地面集包含所有k(k-1)/ 2 对图像,并且对于每列v_r我们制作一个由该列区分的所有图像对组成的集合 - 即所有图像对(i,j),使得v_r [i]!= v_r [j]。然后任何封面都会将每个图像与其他所有图像区分开来,并且最小尺寸的封面将使用尽可能少的列来完成。
实际解决此集合覆盖问题的最快方法可能是通过制定和解决ILP,但branch and bound也可以工作,也可以很容易地变成(快速但可能)次优的启发式。
无论哪种方式,这里有一些简单的简化规则,你可以在尝试解决问题之前应用(并且在添加每一列之后,如果你使用B&amp; B),这通常会减少问题的大小: