子集和问题是经典的NP完全问题:
给定一个数字和一个目标k的列表,是否有一个L的数字子集加起来等于k?
一个学生问我这个称为“子集产品”问题的变体是否是NP完全的:
给定一个数字和一个目标k的列表,是否有L个数字的子集,乘积为k?
我进行了一些搜索,但是找不到任何有关此问题的资源,尽管也许我错过了。
子产品问题NP是否完整?
子集和问题是经典的NP完全问题:
给定一个数字和一个目标k的列表,是否有一个L的数字子集加起来等于k?
一个学生问我这个称为“子集产品”问题的变体是否是NP完全的:
给定一个数字和一个目标k的列表,是否有L个数字的子集,乘积为k?
我进行了一些搜索,但是找不到任何有关此问题的资源,尽管也许我错过了。
子产品问题NP是否完整?
Answers:
评论提到归因于Yao的X3C减少到SUBSET PRODUCT。有了减少的目标,就不难猜测减少的幅度是多少。
定义:
精确覆盖3套(X3C)
给定一个具有|的有限集X | 3的倍数,和收集ç的3元素子集的X,并Ç包含一个确切的盖Ç '为X,其中Ç ' ⊆ Ç和中的每个元素X在只出现一次Ç '?
子集产品
给定一个数字和一个目标k的列表,是否有L个数字的子集,乘积为k?
要将X3C实例简化为SUBSET PRODUCT实例:
在的成员和第一个|的成员之间建立双射映射。X | 质数。用映射的素数替换X和C子集的成员。
对于每个子集,将其成员相乘;SUBSET PRODUCT实例的结果产品列表为L。因为在第1步中将质数用于映射,所以如果子集通过唯一因式分解定理等效,则保证乘积是等效的。
将的成员相乘;结果产品是SUBSET PRODUCT实例的值k。
的素数恰好是X的成员。L中数字的质数因子恰好对应于C个子集的成员。因此,通过将L的解决方案成员映射回C中的子集,可以将新SUBSET PRODUCT实例的任何解决方案转换为X3C解决方案。
根据[ 1 ]:是的
我还引用了相同的参考文献:注释:此问题和问题42之间存在细微的技术区别:前一种情况具有伪有效算法,该算法通过允许数字以一元表示来获得;除非所有的NP完全问题都能通过快速算法解决,但是,即使使用这种不合理的输入表示形式,“子集乘积问题”也无法通过“有效”的方法解决。
看一下[2]的减少。[2]:Fellows,Michael和Neal Koblitz。“固定参数的复杂性和密码学。” 应用代数,代数算法和纠错码(1993):121-131。