机密保障问题的这种变体是什么?


12

输入是宇宙和家庭的子集的ü,说,˚F2 ü。我们假设子集˚F可以覆盖ü,即Ë ˚F é = üUUF2UFUEFE=U

增量覆盖序列是在子集的序列,比方说, = { ë 1ë 2... Ë | A | },即满足FA={E1,E2,,E|A|}

1)EA,EF

2)每一个新来的具有新的贡献,即- 1 Ĵ = 1 Ë Ĵ = 1 Ë ;i>1j=1i1Eij=1iEi

问题是要找到一个最大长度的增量覆盖序列(即最大)。需要注意的是,最大长度序列必须最终覆盖ü,即ê é = ü|A|UEAE=U

我试图找到一种算法或一种近似算法来找到最长的增量覆盖序列。我只是想知道这种布套问题的变种是什么。谢谢!


您需要子集的家庭覆盖宇宙U吗?因为那样的话,由于要寻找具有其他属性的机套,您当然会遇到更困难的机套问题。换句话说,设置覆盖物可以减少您的问题。设置封面的Wiki上还显示了设置封面的不可近似性结果。AU
哈利

1
只是一个观察(太小而无法回答):当您的子集大小为2时,您所寻找的实际上是一片跨越森林。
David Eppstein 2014年

对于OP来说可能不是新手,但是这里有一些观察。(1)最佳值始终为| U |。最佳值是否等于| U | 可以通过尝试最小化覆盖元素数量的贪婪算法来有效地确定是否选择。(2)如果F中的所有集合的大小均为2,则相同的贪婪算法也适用,请参阅David Eppstein的评论。(3)相同的贪婪算法通常不起作用(叹气)。一个反例:F = {{{1,2,3},{1,4,5,6},{2,4,5,6},{3,4,5,6}}。
伊藤刚(Tsuyoshi Ito)2014年

1
这个问题看起来根本不像集合覆盖问题……更像是二分图中匹配和诱导匹配之间的混合体。一个很好的等效表述是,如果一个家庭中没有一个元素完全覆盖某个元素,那么这个家庭就是坏人。问题在于找到F的最大子族,以使A没有坏的子族。AFA
daniello 2014年

1
@Neal Young 不错,因为b恰好被一组(即{ a b })覆盖。Fb{a,b}
daniello 2014年

Answers:


4

在这里,我证明问题是NP完全的。

我们将CNF转换为您的问题实例,如下所示。假设CNF的变量是x i,子句是m C j,其中n < m。让û = Ž ,其中在联合所有组都完全不相交。事实上, = { 一个Ĵ | X Ç Ĵ } { 一个n xim Cjn<mU=i(AiBiZi) ={ b Ĵ | X Ç Ĵ }{ b 0 },而 ž 是任何集基数的ķ=2Ñ+1。还分别表示ž=Ž 和定为每个 ž 长度的增加的家庭ķ里面,记 ž Ai={ai,jxiCj}{ai,0}Bi={bi,jxiCj}{bi,0}Zik=2n+1Z=iZiZik对于l=1 ..k。对于每一个变量 X ,我们添加2个ķ集来 ˚F,每组形式的 Ž Ž 。对于每个子句 Ç Ĵ,我们添加一组到 ˚F,其中包含Ž,并为每 X Ç Ĵ元件{一个Ĵ }Zi,ll=1..kxi2kFAiZi,lBiZi,lCjFZxiCj{ai,j}并为每元件{ b Ĵ }x¯iCj{bi,j}

假定该公式是可满足的,并确定了令人满意的赋值。然后挑集的形式的Ž Ž ,这取决于是否X 是真还是假。这些是n k个增量集。现在添加与子句相对应的m套。由于这些子句是可以满足的,因此它们的大小也不断增加。最后,我们甚至可以添加ķ多套(每个变量),使该序列覆盖ükAiZi,lBiZi,lxinkmkU

现在假设将集合放在一个递增序列中。请注意,最多可以为每个x i选择对应于x i的 k + 1套。因此,如果没有子句套在增量序列,至多Ñ ķ + 1 可以被选择,这是太少。注意,一旦选择了子句集,我们最多可以选择与每个x i对应的最多两个集,总共最多2 个n集。因此,我们必须至少选择n(k+1)+mk+1xixin(k+1)xi2n在选择任何子句集之前,先设置 n k 1 )个变量集。但是,因为我们可以为每个 x i最多选择 k + 1,所以这意味着对于每个 x i我们至少选择了 1个,因为 k = 2 n + 1。这决定了变量的“值”,因此我们只能选择“ true”子句。n(k1)k+1xi1k=2n+1

更新:的改变值Ñ2 Ñ + 1通过马兹奥指出。kn2n+1


1
甲澄清:我迅速检查结构为不可满足式Ñ = ķ = 1 = 2),但它似乎我们可以建立一个序列Ñ ķ + 1 + = 4F的递增集。也许我犯了一个错误:我们有˚F = { { 1 0一个1 1一个1x1¬x1n=k=1,m=2n(k+1)+m=4FF={{a1,0,a1,1,a1,2,z1},{b1,0,b1,1,b1,2,z1},{a1,1,z1},{b1,2,z1}}
Marzio De Biasi 2014年

知道你和我自己,我敢肯定,这个错误是我的......我觉得我们应该得到F={{a1,0,a1,1,z1},{b1,0,b1,2,z1},{a1,1,z1},{b1,2,z1}},但当然仍然是一个问题。好的,我知道我在哪里出错了,我很快就解决了,谢谢!
domotorp 2014年

好的,我明天再看!只是注意,你可以写(在评论)是什么X ¬ X ,什么是“目标值”的覆盖序列(是否k)的长度是多少?因为,在修正的应答设置ķ = 2 Ñ + 1,然后再谈谈Ñ ķ + 1 + = 2 Ñ 2 + 2 Ñ + 套放入增量序列 ; 是正确的吗(我还没有尝试还原)?Fxi¬xik=2n+1n(k+1)+m=2n2+2n+m
Marzio De Biasi 2014年

F={{a1,0,a1,1,z1,},{a1,0,a1,1,z1,z2},{a1,0,a1,1,z1,z2,z3},{b1,0,b1,2,z1},{b1,0,b1,2,z1,z2},{b1,0,b1,2,z1,z2,z3},{a1,1,z1,z2,z3},{b1,2,z1,z2,z3}}
domotorp

我认为这是正确的,因为,但是我们只有5个长度递增的序列。n(k+1)+m=65
domotorp 2014年

0

这是一组约束下的包装问题,对于解决,对于任何子一个,我们始终有一个元素X X,其上覆盖一次。ABAXBX

证明:给您解决问题的方法,它立即具有此属性。确实,如果是您问题的最佳解决方案,请考虑这些集合的子集B,并假设E i是该序列中出现在B中的最后一个集合。通过解决方案是增量式的必需属性,可以得出以下结论:E i覆盖了没有先前集合覆盖的元素,这意味着上述属性。E1,,EmBEiBEi

至于另一个方向,也很容易。从解决方案开始,找到只被覆盖一次的元素,将其设置为序列中的最后一个集合,删除该集合,然后重复。QED。A


这是一个很自然的问题。


快速提醒:在集合包装问题中,给定一系列集合,找到符合某些附加约束的最大集合子集(例如,没有元素被覆盖超过10次,等等)。


这个答案是仅证明问题是自然的,还是您还声称有其他东西?
domotorp 2014年

它以一种更简单的方式进行说明。没有?
Sariel Har-Peled 2014年

是的,我同意这一点。
domotorp 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.