“子产品”问题NP是否完整?


21

子集和问题是经典的NP完全问题:

给定一个数字和一个目标k的列表,是否有一个L的数字子集加起来等于kLkLk

一个学生问我这个称为“子集产品”问题的变体是否是NP完全的:

给定一个数字和一个目标k的列表,是否有L个数字的子集,乘积为kLkLk

我进行了一些搜索,但是找不到任何有关此问题的资源,尽管也许我错过了。

子产品问题NP是否完整?


2
有趣的答案,但我想知道:我们是否不能仅通过对k和所有数字取对数来求和?(也许我应该问一个单独的问题?)
j_random_hacker 2014年

1
@j_random_hacker,是的,如果您在此站点上在线搜索后找不到答案,建议您发布一个单独的问题。这是一个很好的问题,答案很好(提示:获取日志会给您带来一些非整数的影响;换句话说,请考虑对数字大小取幂是什么),但这有点切线并且在自己的问题上会更好。
DW

1
@DW:谢谢,我有空的时候我会按照你的建议去做!
j_random_hacker 2014年

Answers:


13

评论提到归因于Yao的X3C减少到SUBSET PRODUCT。有了减少的目标,就不难猜测减少的幅度是多少。

定义:

精确覆盖3套(X3C)

给定一个具有|的有限集X | 3的倍数,和收集ç的3元素子集的X,并Ç包含一个确切的盖Ç 'X,其中Ç 'Ç和中的每个元素X在只出现一次Ç 'X|X|CXCCXCCXC

子集产品

给定一个数字和一个目标k的列表,是否有L个数字的子集,乘积为kLkLk

要将X3C实例简化为SUBSET PRODUCT实例:

  1. 的成员和第一个|的成员之间建立双射映射X | 质数。用映射的素数替换XC子集的成员。X|X|XC

  2. 对于每个子集,将其成员相乘;SUBSET PRODUCT实例的结果产品列表为L。因为在第1步中将质数用于映射,所以如果子集通过唯一因式分解定理等效,则保证乘积是等效的。CL

  3. 的成员相乘;结果产品是SUBSET PRODUCT实例的值kXk

的素数恰好是X的成员。L中数字的质数因子恰好对应于C个子集的成员。因此,通过将L的解决方案成员映射回C中的子集,可以将新SUBSET PRODUCT实例的任何解决方案转换为X3C解决方案。kXLCLC

|X|X|X||X|O(|X|2ln|X|)


1
+1,但要进行归约,我认为我们要求第一个| X | 质数可以用| X |中多项式的位数表示 -我对此是否正确,如果可以,我们有保证吗?
j_random_hacker 2014年

1
优点。我添加了一个段落来解决这个问题。
凯尔·琼斯

1
谢谢,那个定理巩固了它!并不是要挑剔,而是根据您链接到的页面,第k个素数约为k log k,并且假定Eratosthenes的Sieve显然计算出时间为O(n log log n)直至n的所有素数,代入n = k log k似乎给出的时间为O(k * log(k)* log(log(k log k))),而不是O(k)(您的O(| X |)),以计算第一个k以这种方式灌注。
j_random_hacker 2014年

1
k

3
kk|X|O(n2)kPXkO(logP)

9

根据[ 1 ]:是的

我还引用了相同的参考文献:注释:此问题和问题42之间存在细微的技术区别:前一种情况具有伪有效算法,该算法通过允许数字以一元表示来获得;除非所有的NP完全问题都能通过快速算法解决,但是,即使使用这种不合理的输入表示形式,“子集乘积问题”也无法通过“有效”的方法解决。

看一下[2]的减少。[2]:Fellows,Michael和Neal Koblitz。“固定参数的复杂性和密码学。” 应用代数,代数算法和纠错码(1993):121-131。


1
如果可能,在期刊文章中实际减少或引用会很好。
templatetypedef

3
@templatetypedef在Garey和Johnson中,减少了3套。由于与姚明的私人交流。
2013年

密码纸的减少是针对另一个问题的,在该问题中,目标产品被同余物替换为目标数,该目标数是实例中给定的模数。(尽管如果我正确理解了证明,则无论如何它们都只会获得较弱的硬度,因为模量是指数级的。)
Jeffrey Bosboom
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.