3
子集总和与子集乘积(强与弱NP硬度)
我希望有人能够向我解释为什么子集乘积问题恰好是NP难题,而子集和问题却是弱NP难题。 子集和:鉴于和,确实存在一个子集使得。X={x1,...,xn}X={x1,...,xn}X = \{x_1,...,x_n\}TTTX′X′X'∑i∈X′xi=T∑i∈X′xi=T\sum_{i\in X'}x_i = T 子产品:鉴于和,确实存在一个子集使得。X={x1,...,xn}X={x1,...,xn}X = \{x_1,...,x_n\}TTTX′X′X'∏i∈X′xi=T∏i∈X′xi=T\prod_{i\in X'}x_i = T 我一直认为这两个问题是等效的-SS的实例可以通过取幂转换为SP实例,SP的对数可以通过对数转换为SS。这使我得出结论,它们都属于NP-hard的同一类-即它们都是弱NP-hard。 此外,似乎可以使用变化很小的动态编程(用SP中的除法代替SS中的减法)来解决相同的问题。 直到我读完Bernard Moret的“计算理论”第8章(对于那些没有这本书的人来说,它都有通过X3C证明子集产品硬度的证明-一个很强的NP难题)。 我了解这种减少,但无法弄清楚我先前的结论出了什么问题(两个问题相等)。 更新:结果表明子集乘积仅是弱NP完全的(目标乘积在是指数的)。加里(Gary)和约翰逊(Johnson)于1981年在《NP完整性》专栏中发表了这篇论文,但是我想它不如他们先前在书中声称的那样可见。Ω(n)Ω(n)\Omega (n)